以下是使用ar压缩的静态库中的函数的几种方法(即 libSOMTEHING.a):
ld -Lpath/to/library -lname myapp.o -o 结果
ld path/to/library/libname.a myapp.o -o 结果
有什么区别?例如,整个库是链接在可执行文件中,还是只是需要的函数?在第二个示例中,切换 lib 和目标文件的位置是否重要?
在第一行中,在目录中的静态库 (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,那么这两行将生成相同的“结果”二进制文件。