是否有可能人为地诱导给定静态库的目标文件提取?

时间:2016-12-22 02:16:23

标签: c++ linux gcc linker static-linking

我最近阅读this answer并注意到用户必须以正确的顺序链接静态库似乎不方便。

是否有一些标记或#pragma我可以在编译我的库时传递给gcc ,以便始终包含我的图书馆目标文件?

更具体地说,我希望用户能够在依赖它的另一个库之前链接我的静态库,而不是使用未解析的符号,就像明确指定的目标文件一样。链接器行是。

特别是,我正在寻找解决方案,其中库的用户不需要做任何特殊的事情,只需要以他们链接任何其他库的方式传递-lMylibrary

1 个答案:

答案 0 :(得分:1)

  

是否有一些旗帜或#pragma我可以传递给gcc

没有

  

我希望用户能够在依赖它的另一个库之前链接我的静态库,而不是使用未解析的符号,就像在链接器行上显式指定的目标文件一样。

将您的“库”作为单个对象文件发送。换句话说,而不是:

ar ru libMyLibrary.a ${OBJS}

使用:

ld -r -o libMyLibrary.a ${OBJS} 
  

特别是,我正在寻找解决方案,其中库的用户不需要做任何特殊的事情,只需要以他们链接任何其他库的方式传递-lMylibrary

您可以命名对象文件libMyLibrary.a。我相信链接器将使用通常的规则搜索它,但是当它找到它时,它会发现这是一个目标文件,并将其视为这样,尽管它被“错误命名”。这应该至少在Linux和其他ELF平台上有效。我不确定它是否适用于Windows。