如何强制链接器使用共享库而不是静态库?

时间:2010-12-12 15:58:22

标签: c++ linux unix shared-libraries

这是Linux编程书的引用:


  

% gcc -o app app.o -L. –ltest

假设libtest.alibtest.so都可用。然后链接器必须 选择其中一个库而不是另一个。链接器搜索每个目录(首先 用-L选项指定的那些,然后是标准目录中的那些选项。当时 链接器找到包含libtest.alibtest.so的目录,链接器停止 搜索目录。如果目录中只存在两个变体中的一个,则链接器 选择那个变种。否则,链接器会选择共享库版本,除非 你明确地指示它。你可以使用-static选项来要求静态 档案。例如,以下行将使用libtest.a存档,即使是 libtest.so共享库也可用:

% gcc -static -o app app.o -L. –ltest


因为如果链接器遇到包含libtest.a的目录,它会停止搜索并使用该静态库,如何强制链接器只搜索共享库,而不是静态?

% gcc -o app app.o -L. libtest.so

2 个答案:

答案 0 :(得分:19)

如果您的链接器支持-l格式-l:filename,则可以使用ld选项(gcc -o app app.o -L. -l:libtest.so 的旧版本没有)

-l

其他选项是直接使用文件名而不使用-Lgcc -o app app.o /path/to/library/libtest.so

{{1}}

答案 1 :(得分:0)

来自男人:

  

-shared-libgcc中
   -static-libgcc的
             在提供libgcc作为共享库的系统上,这些选项              分别强制使用共享版本或静态版本。              如果编译器没有构建libgcc的共享版本              配置,这些选项无效。

祝你好运