当存在同名的共享库时,如何强制与静态库链接
问题描述:
假设我有一个文件main.cpp
,它使用sin()
函数,该函数在libmath
中定义。另外假设我们在同一个目录中都有libmath.a和libmath.so。现在,如果我发出命令g++ -o main main.cpp -lmath
,Linux的默认行为是链接到共享库libmath.so
。我想知道是否有办法强制程序与静态库libmath.a
链接而不删除或移动共享库?当存在同名的共享库时,如何强制与静态库链接
答
您需要将-static传递给链接器,但仅限于您需要的特定库。例如:
g++ -o main main.cpp -Wl,-Bstatic -lmath -Wl,-Bdynamic
+3
我认为你的意思是“-Bstatic”而不是“-static”。太糟糕的单字符编辑是不允许的... – 2011-08-31 07:13:53
答
使用此功能:
g++ -o main main.cpp /path_to/libmath.a
答
如果你的链接器支持-l:<filename>
你可以使用:
g++ -o main main.cpp -l:libmath.a
的可能的复制[G ++链接:强制静态链接,如果静态库是否存在? ](http://stackoverflow.com/questions/3698321/g-linker-force-static-linking-if-static-library-exists) – 2016-04-05 13:08:48