动态库很不错。它们中嵌入了一些信息,可以帮助运行时链接器确定最终可执行文件需要加载的其他库。它还告诉可执行文件将加载哪些符号
然而,静态库是一个痛苦的问题。链接器不会自动链接存档的依赖项。当静态链接中等复杂或具有深度依赖图的库时,这会变得令人发指。那么为什么归档只能包含他们的依赖信息呢?我试着做到这一点。我的想法的关键是/usr/lib/libc.so。此文件不是共享对象文件,而是链接描述文件。
链接器脚本为您提供了对最终链接器输出的大量控制,但我想要的只是指定您可以使用的依赖项:
INPUT( -ldependency -ldependecy2 )
以下是我的问题。
我目前的解决方案是创建一个名为libMyLibrary.a的链接描述文件。它包含
INPUT( -lMyRealLibrary -ldependency1 -ldependency2 )
我必须亲自插入依赖项,如果ld可以为我做好,那将是另一天的问题。
答案 0 :(得分:0)
要回答问题的第二部分,ar p ARCHIVE SCRIPT
将捕获ARCHIVE中包含的SCRIPT的内容。或ar x ARCHIVE SCRIPT
提取文件,然后将其传递给链接器,如ld blah blah -TSCRIPT
。
答案 1 :(得分:0)
此形式的链接器脚本仅由GNU-ld支持(新的Gold ELF链接器也支持有限)。如果您有任何可移植性要求,最好不要依赖链接器脚本支持。
libtool专门用 编写,以帮助创建共享库的可移植性(平台之间的细节差别很大)。
如果您不需要可移植性,那么当然您不需要libtool及其复杂性。