在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 $<