0

最近,我遇到了链接问题和VPATH这个问题的副作用。

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

  • 使用-L-l选项:

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

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

我的问题是,鉴于我正在链接到我自己的正在实施的库(而不是已安装并因此放置的库/usr/lib),选择这两种方法有什么好处吗?

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

4

1 回答 1

1

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

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

于 2012-06-18T18:41:46.763 回答