两种链接到静态库的方法

时间:2013-02-22 07:20:56

标签: gcc ld ar

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

  

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

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

1 个答案:

答案 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,那么这两行将产生相同的“结果”二进制文件。