当存在同名的共享库时,如何强制链接静态库
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
【讨论】:
以上是关于当存在同名的共享库时,如何强制链接静态库的主要内容,如果未能解决你的问题,请参考以下文章