Makefile &引用;libvw.so:无法识别文件:文件被截断";及;制造-j 8“;

Makefile &引用;libvw.so:无法识别文件:文件被截断";及;制造-j 8“;,makefile,Makefile,我从make-j8中获得libfoo.so:文件未识别:文件被截断错误。 当我删除文件并重新制作时,一切正常: $ make clean $ make -j 8 ... libvw.so: file not recognized: File truncated make: *** [all] Error 2 $ mv libvw.so libvw.so- $ make -j 8 success $ cmp libvw.so libvw.so- i、 例如,libvw。所以很好 使用-j 8它可

我从
make-j8
中获得
libfoo.so:文件未识别:文件被截断
错误。 当我删除文件并重新制作时,一切正常:

$ make clean
$ make -j 8
...
libvw.so: file not recognized: File truncated
make: *** [all] Error 2
$ mv libvw.so libvw.so-
$ make -j 8
success
$ cmp libvw.so libvw.so-
i、 例如,
libvw。所以
很好

使用
-j 8
它可以立即工作:

$ make clean
$ make
success
那么,如何在共享库中使用
-j8


(此项目使用GNU Make,因此特定于GNU的解决方案是可以的)。

最有可能的情况是,您的一个makefile规则中缺少依赖项,而发生错误的原因是,在可执行文件尝试链接到libw.so时,libw.so仍在生成中


但也要注意,makeout-there的某些版本存在并行依赖的bug。确保您使用的发行版修补了此类问题。

我也面临类似问题。但是,如果这是一个依赖性问题,那么它是如何在第二次尝试的基础上成功构建的呢?我使用的是debian:最新的docker图像,我想我没有错误的Make版本。然而,我如何才能确定我的make版本是否存在bug?@Farzan当parallel make遇到错误时,它会继续构建所有正在进行的规则,直到它们完成或失败。因此,下一次构建失败的规则时,它需要的文件就在那里。@Farzan还注意到,大多数Docker图像的维护非常糟糕,这是一个巨大的安全问题,还有其他漏洞。感谢您的快速回复。你是说即使是docker hub上的官方图像(例如debian)也不足以在生产中使用吗?关于并行生成问题,我想我理解您提到的内容,但我几乎可以肯定这不是一个依赖性问题,因为代码在另外两台服务器(当然不是docker)上使用并行生成成功构建。我现在开始怀疑debian docker的形象。你知道我如何检查它是否是debian发行版上make的bug吗?大多数“官方”图片都不是。即使项目中有人上传过一次,他们也可能忘记了,因为Docker不能为编写可靠软件的人解决任何问题。您可以对照检查
apt缓存策略make
,查看您的版本是否缺少任何明显的错误修复。。。或者,您可以检查规则(或者使用
-d
运行
make
,或者尝试使用
-j
而不使用数字),以查看它是否是Makefile中的缺陷。