0

以下是使用ar压缩的静态库中的函数的几种方法(即 libSOMTEHING.a):

ld -Lpath/to/library -lname myapp.o -o 结果
ld path/to/library/libname.a myapp.o -o 结果

有什么区别?例如,整个库是链接在可执行文件中,还是只是需要的函数?在第二个示例中,切换 lib 和目标文件的位置是否重要?

4

1 回答 1

1

在第一行中,在目录中的静态库 (libname.a) 之前搜索动态库 (libname.so)。此外,标准库路径也会搜索 libname.*,而不仅仅是 /path/to/library。

来自“男人 ld”

在支持共享库的系统上,ld 还可以搜索 libnamespec.a 以外的文件。具体来说,在 ELF 和 SunOS 系统上,ld 将在目录中搜索名为 libnamespec.so 的库,然后再搜索名为 libnamespec.a 的库。(按照惯例,“.so”扩展名表示共享库。)

第二行强制链接器使用 path/to/lib 处的静态库。

如果没有构建动态库 (libname.so),并且唯一可用的库是 path/to/library/libname.a,那么这两行将生成相同的“结果”二进制文件。

于 2013-02-22T09:05:32.933 回答