动态库与应用,如果存在同名全局变量,会如何?
实现了一个动态库,封装了一些方法。然后基于这个动态库,实现了一个应用程序。应用程序中含有全局变量A,动态库中也含有全局变量A,当调用动态库中函数后,发现应用程序的A发生了变化!
-Wl,-Bsymbolic
在创建动态链接库时,gcc/g++选项中添加编译选项
-Wl,-Bsymbolic
其中Wl表示将紧跟其后的参数,传递给连接器ld。Bsymbolic表示强制采用本地的全局变量定义,这样就不会出现动态链接库的全局变量定义被应用程序/动态链接库中的同名定义给覆盖了.
参考:
linux下 应用程序中的全局变量与so库中的全局变量名冲突,怎么办?