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

假设我有一个main.cpp文件,它使用了在libmath定义的sin()函数。 另外假设我们在同一个目录中都有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 

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

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

使用这个功能:

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