当存在同名的共享库时,如何强制链接静态库

Posted

技术标签:

【中文标题】当存在同名的共享库时,如何强制链接静态库【英文标题】:How can I force linking with a static library when a shared library of same name is present 【发布时间】:2011-05-28 20:40:14 【问题描述】:

假设我有一个文件main.cpp,它使用sin() 函数,该函数在libmath 中定义。还假设我们在同一目录中同时拥有 libmath.a 和 libmath.so。现在,如果我发出命令g++ -o main main.cpp -lmath,Linux 的默认行为是链接到共享库libmath.so。我想知道有没有办法强制程序与静态库libmath.a链接而不删除或移动共享库?

【问题讨论】:

g++ linker: force static linking if static library exists?的可能重复 【参考方案1】:

您需要将 -static 传递给链接器,但仅限于您想要的特定库。例如:

g++ -o main main.cpp -Wl,-Bstatic -lmath -Wl,-Bdynamic

【讨论】:

对于 gcc/binutils 来说当然没关系,-static 和 -Bstatic 在 GNU 链接器中是同义词。【参考方案2】:

如果您的链接器支持-l:<filename>,您可以使用:

g++ -o main main.cpp -l:libmath.a

【讨论】:

【参考方案3】:

使用此功能:

g++ -o main main.cpp /path_to/libmath.a

【讨论】:

以上是关于当存在同名的共享库时,如何强制链接静态库的主要内容,如果未能解决你的问题,请参考以下文章

Linux:链接共享库时如何使用 .pc 文件?

强制 GCC 通知共享库中未定义的引用

当我链接动态库而不是静态库时,CMake 有效

在 Xcode 静态库中包含框架?

加载具有相同符号的两个共享库时是不是存在符号冲突

在为 LINUX 创建共享库时如何避免 STL 的私有/弱副本