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

问题描述 投票:1回答:1

有什么时候可以安全地要求make做多个工作吗?

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

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

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

在看到问题之后,我现在对使用多个工作感到谨慎。是否有一些方法可以提前告知多个作业是否可以与make一起使用?

c++ gcc makefile shared-libraries gnu
1个回答
0
投票

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

我有过这样的情况:make -j2的输出工作得很好,但make -j4没有,因为有一个项目在它应该之前编译,但我没有足够仔细地指定它。同样,我有make -j4似乎工作,只是发现某些部分正在编译陈旧的代码,这意味着最终产品将不同于我的预期。在我发现依赖性问题之前我必须确保make clean在任何构建之前允许我再次安全地使用make -j4

让我回答你的每个问题:

  • 有什么时候可以安全地要求make做多个工作吗?

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.