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

39
假设我有一个名为main.cpp的文件,其中使用了在libmath中定义的sin()函数。另外假设我们在同一个目录中同时拥有libmath.alibmath.so。现在,如果我输入命令g++ -o main main.cpp -lmath,Linux的默认行为是链接到共享库libmath.so。我想知道是否有一种方法可以强制程序链接到静态库libmath.a,而不必删除或移动共享库?

3个回答

32

你需要向链接器传递-static参数,但只针对你想要的特定库。例如:

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

对于gcc/binutils来说,-static和-Bstatic在GNU链接器中是同义词,因此应该没有关系。 - nos

14

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

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

5

使用这个函数:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接