使用-Lpath -lname选项与直接提供库文件

时间:2012-06-18 08:57:40

标签: gcc linker static-linking

最近,我遇到了问题linking and VPATH的问题。

假设您正在实现一个库,并且希望将测试与它链接起来。你有两个选择(我知道):

  • 使用-L-l选项:

    gcc main.o -Lpath/to/lib -lname
    
  • 直接提供库文件:

    gcc main.o path/to/lib/libname.a
    

我的问题是,鉴于我在实施时链接到我自己的库(而不是已安装的库,因此放在/usr/lib中),在选择方面有任何优势两种方法?

目前我使用的是第一种方法,但第二种方法可以解决我使用VPATH时遇到的问题。在进行切换之前,我特别想知道第二种方法是否存在某些警告。

1 个答案:

答案 0 :(得分:1)

我能想到的唯一区别是第一种方法允许链接器选择共享库(如果存在)。第二个没有,因为您明确命名了.a静态存档。

如果您使用的是共享库,则存在差异:如果第二个表单命名没有soname的共享库,则应用程序将具有path/to/lib/libname.so的DT_NEEDED标记,但对于第一个表单,将具有标记值libname.so。 (如果共享库具有将用于DT_NEEDED标记的soname,但指定了路径。)