我最近阅读this answer并注意到用户必须以正确的顺序链接静态库似乎不方便。
是否有一些标记或#pragma
我可以在编译我的库时传递给gcc
,以便始终包含我的图书馆目标文件?
更具体地说,我希望用户能够在依赖它的另一个库之前链接我的静态库,而不是使用未解析的符号,就像明确指定的目标文件一样。链接器行是。
特别是,我正在寻找解决方案,其中库的用户不需要做任何特殊的事情,只需要以他们链接任何其他库的方式传递-lMylibrary
。
答案 0 :(得分:1)
是否有一些旗帜或
#pragma
我可以传递给gcc
没有
我希望用户能够在依赖它的另一个库之前链接我的静态库,而不是使用未解析的符号,就像在链接器行上显式指定的目标文件一样。
将您的“库”作为单个对象文件发送。换句话说,而不是:
ar ru libMyLibrary.a ${OBJS}
使用:
ld -r -o libMyLibrary.a ${OBJS}
特别是,我正在寻找解决方案,其中库的用户不需要做任何特殊的事情,只需要以他们链接任何其他库的方式传递
-lMylibrary
。
您可以命名对象文件libMyLibrary.a
。我相信链接器将使用通常的规则搜索它,但是当它找到它时,它会发现这是一个目标文件,并将其视为这样,尽管它被“错误命名”。这应该至少在Linux和其他ELF
平台上有效。我不确定它是否适用于Windows。