最近,我遇到了问题linking and VPATH
的问题。
假设您正在实现一个库,并且希望将测试与它链接起来。你有两个选择(我知道):
使用-L
和-l
选项:
gcc main.o -Lpath/to/lib -lname
直接提供库文件:
gcc main.o path/to/lib/libname.a
我的问题是,鉴于我在实施时链接到我自己的库(而不是已安装的库,因此放在/usr/lib
中),在选择方面有任何优势两种方法?
目前我使用的是第一种方法,但第二种方法可以解决我使用VPATH
时遇到的问题。在进行切换之前,我特别想知道第二种方法是否存在某些警告。
答案 0 :(得分:1)
我能想到的唯一区别是第一种方法允许链接器选择共享库(如果存在)。第二个没有,因为您明确命名了.a
静态存档。
如果您使用的是共享库,则存在差异:如果第二个表单命名没有soname的共享库,则应用程序将具有path/to/lib/libname.so
的DT_NEEDED标记,但对于第一个表单,将具有标记值libname.so
。 (如果共享库具有将用于DT_NEEDED标记的soname,但指定了路径。)