使多个作业生成不兼容.so

时间:2013-09-12 12:38:50

标签: c++ gcc makefile shared-libraries gnu

是否有任何快速指导方针可以安全地要求make在多个工作岗位上工作?

我问,因为在过去,它似乎通常对我来说很好,但最近它一直在引起麻烦。

我做了一个“make -j8”(使用八个工作来加速建筑)并继续得到:

“。无法识别正在生成的其中一个共享库上的文件格式”。这甚至在清理完共享库之后(make clean成功删除它,但是一旦我也做了不必要的步骤,手动删除它)并重新开始。

在看到问题之后,我现在很想使用多个工作。有没有办法提前告知多个工作是否可以与make一起使用?

1 个答案:

答案 0 :(得分:0)

这完全取决于您的Makefile中依赖关系的布局。你必须非常小心,并且要指定每个依赖关系而不仅仅依赖于行顺序和巧合。

我遇到make -j2的输出工作正常但make -j4没有的情况,因为有一个项目在它应该之前编译,但我在指定时并不够谨慎那。同样地,我有make -j4似乎工作,只是发现某些部分正在使用陈旧代码进行编译,这意味着最终产品将与我预期的不同。在我发现依赖性问题之前,我必须确保make clean在构建之前make -j4允许我再次安全地使用make clean

让我回答你的每一个问题:

  • 有什么时候可以安全地要求make做的快速指南 它与多个工作合作?

不在我的书中。如果您的依赖项完全正确,那么您就可以了。否则,要小心。

  • 是否有一些方法可以提前告知多个工作是否可以 与make一起使用?

我认为答案与前一项相同。我通常认为它会工作,直到我知道它没有,然后我试图找到问题。然而,这可能不是一种安全的工作方式。如果您注意到意外结果,请使用make然后.so file format not recognized而不使用多个作业,并查看是否可以解决问题。如果是这样,您可以合理地假设您的Makefile的依赖关系不正确。

您还有一个关于{{1}}问题的隐含问题。这听起来像是同一个问题。具体来说,也许.so正在构建错误的依赖关系,或错误的.so在找到或构建正确的一个之前被拉入,或者.so在被调用时是一个不完整的状态。