这是Linux编程书的引文:
% gcc -o app app.o -L. –ltest
假设这两个libtest.a和libtest.so是available.Then链接器必须选择的图书馆之一,而不是other.The链接搜索每个目录(第那些指定的-L选项,然后将这些在标准目录)。当链接器找到了一个包含目录无论是libtest.a或libtest.so,链接器将停止搜索目录。如果目录中仅存在两个变体之一,则链接器将选择该变体。否则,除非另有明确指示,否则链接程序将选择共享库版本。您可以使用该-static选项来请求静态归档。例如,libtest.a即使libtest.so共享库也可用,以下行仍将使用存档 :
libtest.a
libtest.so
-L
-static
% gcc -static -o app app.o -L. –ltest
由于链接器遇到包含libtest.a它的目录时,它将停止搜索并使用该静态库,那么如何强制链接器仅搜索共享库,而不搜索静态库?
% gcc -o app app.o -L. libtest.so ?
% gcc -o app app.o -L. libtest.so
如果链接器支持,则可以使用-l其形式的option -l:filename(ld不支持旧版本)
-l
-l:filename
ld
gcc -o app app.o -L. -l:libtest.so
另一种选择是直接使用文件名而不使用-l和-L
gcc -o app app.o /path/to/library/libtest.so