lib依赖关系及其顺序
实际上,当链接库时,使用应该在定义之前。在处理提供其定义的库文件之前,需要知道任何未解决的符号。
什么问到订单,恐怕您必须手动完成。如果libA依赖于libB(即libA使用来自libB的符号),则必须按以下顺序链接:-lA -lB
。
这主要是文档问题。一个记录良好的库清楚地说明了它依赖的其他库,因此您可以计算出正确的链接顺序。
如果你不想读文档或没有可用的文件,试错始终是一个选择:)
我发现这是烦人了。我记得寻找一种工具来为我排序,但没有找到任何帮助。
最后,我决定使用暴力破解方法:如果您将两次列出所有库,例如-lA -lB -lA -lB
,它将保证每个库都在每个其他库之前(和之后)列出。
因此给定$(LIST)
库,您可以使用$(addprefix -l,$(LIST) $(LIST))
。
不是很优雅,有些放慢链接阶段,但工程。
Hummm,谢谢,但我知道这种方法可以得到* UGLY *如果你有15个库:D – hari 2011-04-12 21:56:05
@hari:你可以使用'--start-group'和'--end-group'选项(或' ('和' - )'),以避免重复。根据[binutils手册](http://sourceware.org/binutils/docs-2.21/ld/Options.html),它具有显着的性能成本。 – eriktous 2011-04-13 03:25:10
@eriktous:是的,最终有人必须确保重复不会发生。 – hari 2011-04-14 01:23:22
谢谢。这就是我想确认的,没有任何魔法可以告诉你。 – hari 2011-04-12 21:55:37