1. 如果想隐藏不想导出的函数,设置默认的函数导出选项,这样只有明确想要导出的函数才导出(不同编译器可能不一样)
-fvisibility=hidden
2.默认情况下,GCC/G++链接时优先链接动态库,如果没有动态库,则链接相应的静态库。同时,GCC/G++也提供了链接选项 -Wl,-Bstatic 和 -Wl,-Bdynamic 供用户指定链接动态库或者静态库。
3. 表示强制采用本地的全局变量定义
-Wl,-Bsymbolic -Wl,-Bsymbolic-functions -fPIC
4. 增加运行时库查找路径(提供给别人的库,linux经常出现找不到库的情况,可以尝试设置这个值,使用相对路径去查找库)
-Wl,-rpath=.
5. 当发布对外的动态库的时候,会想着把编译过程链接的其他静态库导出的函数都隐藏,使发布的库只有我们想要的API(不同的编译器,可能这个常数不一样,参考https://www.orcode.com/question/504769_kea106.html)
-Wl,--exclude-libs,ALL
6. 安全编译选项:-fPIC -fvisibility=hidden -Wl,--exclude-libs,ALL -Wl,-z,relro,-z,now -Wl,-z,noexecstack -fstack-protector
7. 链接库的时候,有时候链接了某个库,但是还缺那个库的符号,尝试把该库链接的顺序放到后面,或许能解决