动态库很不错。然后嵌入信息,帮助运行时链接程序确定最终可执行文件需要加载的其他库。它还会告诉可执行文件什么样的符号将被加载动态链接器依赖信息嵌入在档案中
然而,静态库是一个痛苦的脖子。链接器不会自动链接存档的依赖关系。当静态链接一个中等复杂或具有深度依赖关系图的库时,这会变得非常令人讨厌。
那么为什么不能存档只包括他们的依赖信息。我试图做到这一点。我的想法的关键是/usr/lib/libc.so。该文件不是共享对象文件,而是链接器脚本。
链接脚本给你很多在最后连接输出控制的,但我要的是指定的依赖,你可以用:
INPUT(-ldependency -ldependecy2)
这里是我的问题。
- 这看起来很简单,为什么以前没做过?我不能成为第一个想到这一点的人。这似乎比pkg-config或libtool更简单也更直观(尤其是libtool呃)。
- 我试图将链接器脚本嵌入到存档中,它不起作用。为什么不?它可以工作吗?我怀疑一些聪明的使用ranlib可能会诀窍,但它超出了我的想象。
我目前的解决方案是创建一个名为libMyLibrary.a的链接器脚本。它包含
INPUT(-lMyRealLibrary -ldependency1 -ldependency2)
我必须把手工的依赖关系,它会如果LD可以为我是很好的,但在另一天是问题。
为什么不使用libtool?它已经为静态库保留了依赖关系。任何特定的并发症 – Hasturkun 2009-02-22 12:07:21
path/to/build/dir/libtool --mode =执行gdb path/to/executable。我认为libtool是一个有效和可怕的解决方案。 – 2009-02-24 21:48:59