lib依赖项及其顺序

时间:2011-04-12 06:40:44

标签: c dependencies makefile

有时如果我们不在makefile中按特定顺序列出库,则会失败。

原因是 - 定义应该在使用之前。

如何确定正确的订单?

2 个答案:

答案 0 :(得分:4)

实际上,在链接库时,应该在定义之前使用。在处理提供其定义的库文件之前,需要知道任何未解析的符号。

订单是什么,我担心你必须手动完成。如果libA依赖于libB(即libA使用来自libB的符号),则必须按以下顺序链接:-lA -lB

这主要是文档问题。一个记录良好的库清楚地说明了它所依赖的其他库,因此您可以找出正确的链接顺序。

如果您不想阅读文档或没有可用的文档,则试用和错误始终是一个选项:)

答案 1 :(得分:1)

我发现这也很烦人。我记得正在寻找一种工具来为我排序,但没有找到任何帮助。

最后我决定使用蛮力方法:如果你要列出所有的libs两次,例如-lA -lB -lA -lB,它将保证在每个其他库之前(和之后)列出每个库。

因此,如果有$(LIST)个库,您可以使用$(addprefix -l,$(LIST) $(LIST))

不是很优雅,并且稍微减慢了链接阶段,但是有效。