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

Linux 当存在同名的共享库时,如何强制链接静态库,linux,gcc,g++,ld,Linux,Gcc,G++,Ld,假设我有一个文件main.cpp,它使用sin()函数,该函数在libmath中定义。还假设libmath.a和libmath.so在同一个目录中都可用。现在,如果我发出命令g++-o main.cpp-lmath,Linux的默认行为是链接到共享库libmath.so。我想知道是否有一种方法可以强制程序链接到静态库libmath.a,而不删除或移动共享库?您需要将-static传递给链接器,但只针对您想要的特定库。e、 g: g++ -o main main.cpp -Wl,-Bstatic

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

您需要将-static传递给链接器,但只针对您想要的特定库。e、 g:

g++ -o main main.cpp -Wl,-Bstatic -lmath -Wl,-Bdynamic
使用此功能:

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

如果您的链接器支持
-l:
,您可以使用:

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

当然,这对gcc/binutils不重要,-static和-Bstatic是GNU链接器中的同义词