以下是使用静态库中的函数的几种方法,使用 ar 进行压缩(即libSOMTEHING.a):
ld -Lpath / to / library -lname myapp.o -o result
ld path / to / library / libname.a myapp.o -o result
有什么区别?例如,整个库是在可执行文件中链接还是仅仅是所需的函数?在第二个例子中,切换lib和目标文件的位置是否重要?
答案 0 :(得分:1)
在第一行中,在目录中的静态库(libname.a)之前搜索动态库(libname.so)。此外,还搜索标准lib路径的libname。*,而不仅仅是/ path / to / library。
来自“man ld”
在支持共享库的系统上,ld也可以搜索 libnamespec.a以外的文件。具体来说,在ELF和SunOS上 系统,ld将在目录中搜索一个名为的库 libnamespec.so在搜索名为libnamespec.a的文件之前。 (通过 约定,“。so”扩展名表示共享库。)
第二行强制链接器在path / to / lib。
使用静态库如果没有构建动态库(libname.so),并且唯一可用的库是path / to / library / libname.a,那么这两行将产生相同的“结果”二进制文件。