含义警告“文件被多个包触及”

Posted

技术标签:

【中文标题】含义警告“文件被多个包触及”【英文标题】:Meaning warning "File is touched by more than one package" 【发布时间】:2019-06-08 23:25:30 【问题描述】:

我正在使用 buildroot 创建一个简单的 linux 内核,我正在添加一个我自己完成的小驱动程序,我创建了 Config.in 文件和 drivername.mk 以便能够成功选择 make menuconfig 中的驱动程序。

执行make 构建映像时,编译正常进行,直到我的驱动程序开始编译,它看起来可以正确编译和创建映像,但我收到大量警告说./lib/gcc/arm-buildroot-linux-uclibcgnueabihf/ 中的不同文件被不止一个包:[u'host-gcc-initial', u'host-gcc-final']

任何人都可以向我解释一下这个问题以及导致它的原因吗?您是否需要更多信息才能知道发生了什么?忽略它们是否安全?

先谢谢

【问题讨论】:

【参考方案1】:

实际上,在搜索“被多个软件包触及”时,我找到了http://lists.busybox.net/pipermail/buildroot/2017-October/205602.html,我们发现如果您不进行并行构建并且不是内核维护者,则可以安全地忽略此警告.

也就是说,如果您要提交包含在 Linux 内核中的代码,请做一个好公民,并确保您识别出您的代码所依赖的所有内容。 (我实际上并不是一个活跃的内核黑客,所以我不知道他们现在使用什么方法。)

基本思想是编译需要按逻辑顺序完成的事情有很多步骤。在一个小项目中,我们只使用我们知道要放入的依赖项,因为我们也在该依赖项中进行了编码。但是对于内核大小的项目,您可以保证不是每个人都这样做。他们中的一些人只是指定依赖关系,如果它们是正确构建事物所需要的 - 如果默认顺序有效,那么事情可能会在有人发现缺少依赖关系之前几年,当他们试图只更新一件事是缺少依赖项,而另一部分代码因此没有得到更新。

另一方面,当您并行执行操作时,它会变得复杂得多。现在您确实需要指定每个依赖项,因为不再有任何固有的可靠顺序。有些人可能仍会串行构建,而另一些人则使用两个处理线程。我将使用 8。我曾在倾向于使用 30 的小组中工作,因为他们在 32 处理器机器上,并且在下班时间并不真的需要所有这些。突然间,您需要的文件从通常在您之前处理 30 个目录的目录中得到处理,现在与您需要它的文件同时处理,因为您没有列出依赖项和这 30 个目录中的所有内容'尚未处理且未处理的依赖项尚未完成处理。

【讨论】:

以上是关于含义警告“文件被多个包触及”的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 警告级别的含义?

无响应脚本警告 - 含义和如何解决

tslint 的含义是啥:“警告:'no-use-before-declare' 规则需要类型信息”?

Keil软件常见的警告和错误含义。——Arvin

警告:不要多次处理对象[重复]

设备支持警告:Google play 2019