linux 静态链接编译问题
程序员文章站
2022-03-03 20:12:19
...
默认情况下,GCC/G++链接时优先链接动态库,如果没有动态库,则链接相应的静态库。所以想优先使用静态编译时我们需要进行指定。
-Wl,Bstatic -lstdc++ -Wl,Bdynamic
-Wl,-Bstatic指示链接libtest.a静态库,后面的 -Wl,-Bdynamic指示链接系统动态库
GCC 4.5以上,
-static-libstdc++
-Wl,Bsymbolic xxxx -Bsymbolic When creating a shared library, bind references to global symbols to the definition within the shared library, if any. Normally, it is possible for a program linked against a shared library to override the definition within the shared library. This option is only meaningful on ELF platforms which support shared libraries ```
当创建一个动态库时,如果由对全局符号的引用,则把引用绑定到动态库内的定义上。通常,程序在链接到一个动态库时由可能会覆盖这个动态库的符号定义。这个选项只在支持ELF格式动态库的平台有用。
防止符号冲突
通过在头文件的函数接口前加上 下面的语句开放该so包可见的函数接口;__attribute__((visibility("default")))
在Makefile文件中通过“CXX=g++ -fvisibility=hidden”使得未开放的函数名都保护起来。
注意:在对stdc++使用静态链接时可能会出现问题。
参考链接:https://www.it1352.com/350718.html
参考链接:https://www.cnblogs.com/liumeng-blog/p/12213733.html
上一篇: 网关及相关配置
下一篇: 数组切片中的None