链接到静态库的两种方法



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

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

由于我们从命令行中省略了任何动态库,因此应该构建一个静态可执行文件。

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

(附言:一些非GNU ld链接器要求像-o这样的所有选项都在第一个非选项文件名之前,在这种情况下,它们只接受-L... -lnamemyapp.o之前)

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

来自"man ld"

在支持共享库的系统上,ld还可以搜索libnamespec.a以外的文件。特别是在ELF和SunOS上在系统中,ld将在目录中搜索名为libnamespec.so,然后再搜索一个名为libnamespec.a的按照惯例,".so"扩展表示共享库。)

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

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

相关内容

  • 没有找到相关文章

最新更新