近日编译一动态链接库,又长了一点见识。
动态库生成的过程是顺利的,但应用程序无论如何都无法使用该动态库。每每链接时,便报错"undefined reference to ......",开始我一直以为是缺少头文件,或链接时没有找到动态库的原因 。但仔细排查,除开了这种可能。代码本身也没有问题,因为生成静态库的时候,一切正常,唯独链接生成的动态库,总是报错。
偶然中发现makefile中CFLAGS参数中有-fvisibility=hidden -fvisibility-inlines-hidden一段,于是查了资料,顿时如梦方醒。这两个参数的作用是为了减小共享库的体积,提高执行效率而设定的。但其会将部分符号隐藏,以致在链接阶段,外部程序无法找到对应要链接的符号,从而报错
这个特性是gcc4中才具备的,今天偶然遇上,了解了一把