欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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