linux编译动态库,配置暴露的接口

在linux中,使用gcc进行脚本编译,默认情况下,会将非static的方法以及类都导出到so中

这种特性让我们方便使用时,有时候也会出现导出库的重名以及冲突。

linux的动态库加载库时,如果存在的就会进行覆盖,最终形成一套函数表,这就有可能会产生部分导出函数冲突,调用后崩溃的现象。

为了解决这种问题,必须对导出的函数进行规划,让一部分函数变为内部符号,不进行导出。

要做到这一点,需要做两件事儿

1、对导出的符号进行定义,显示进行导出

__attribute__((visibility ("default"))) void add(int a, int b)

使用__attribute__((visibility ("default")))来说明,这个函数需要导出的

2、对makefile进行修改,设置默认的函数均为local

%.o:%.cpp

$(CXX) -fvisibility=hidden -g -fPIC ${INCLUDE} -o $@ -c $<