2010-12-21 69 views
25

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

+2

的可能的复制[G ++链接:强制静态链接,如果静态库是否存在? ](http://stackoverflow.com/questions/3698321/g-linker-force-static-linking-if-static-library-exists) – 2016-04-05 13:08:48

回答

20

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

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

我认为你的意思是“-Bstatic”而不是“-static”。太糟糕的单字符编辑是不允许的... – 2011-08-31 07:13:53

4

使用此功能:

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

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

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