9 QA 错误和警告消息
目录
9.1简介
构建配方时,OpenEmbedded 构建系统会对输出执行各种 QA 检查,以确保检测和报告常见问题。有时,当您创建一个新配方来构建新软件时,它会顺利构建。如果不是这种情况,或者当您在构建任何软件时遇到 QA 问题,可能需要一点时间来解决它们。
虽然忽略 QA 消息甚至禁用 QA 检查很诱人,但最好尝试解决任何报告的 QA 问题。本章提供了 QA 消息列表和您可能遇到的问题的简要说明,以便您可以正确解决问题。
下一部分提供了基于默认配置的所有 QA 错误和警告消息的列表。每个条目都提供消息或错误表单以及解释。
注意
-
在每条消息的末尾,相关的 QA 测试的名称(如“ inane.bbclass ”部分中所列)出现在方括号内。
-
如前所述,此错误和警告消息列表仅用于 QA 检查。该列表并未涵盖您可能遇到的所有可能的构建错误或警告。
-
由于默认情况下禁用了某些 QA 检查,因此此列表不包括所有可能的 QA 检查错误和警告。
9.2错误和警告
-
<packagename>: <path> is using libexec please relocate to <libexecdir> [libexec]
/usr/libexec
当发行版配置使用不同的路径时,指定的包包含的文件<libexecdir>
默认<libexecdir>
为$prefix/libexec
. 但是,此默认值可以更改(例如${libdir}
)。
-
package <packagename> contains bad RPATH <rpath> in file <file> [rpaths]
由配方生成的指定二进制文件包含动态库加载路径 (rpaths),其中包含构建系统路径,例如 TMPDIR,这对于目标来说是不正确的,并且可能是一个安全问题。
-rpath
在do_compile日志中检查传递给链接器的错误选项 。根据正在构建的软件所使用的构建系统,可能有一个配置选项可以在软件构建中完全禁用 rpath 使用。
-
<packagename>: <file> contains probably-redundant RPATH <rpath> [useless-rpaths]
由配方生成的指定二进制文件包含动态库加载路径(rpaths),默认情况下,链接器(例如
/lib
和/usr/lib
)会在标准系统上搜索这些路径。虽然这些路径不会造成任何破损,但它们确实浪费空间并且是不必要的。根据正在构建的软件所使用的构建系统,可能有一个配置选项可以在软件构建中完全禁用 rpath 使用。
-
<packagename> requires <files>, but no providers in its RDEPENDS [file-rdeps]
已从指定文件上的指定包中识别出文件级依赖项,但RDEPENDS 中没有明确的对应条目。如果在运行时需要特定文件,则应在配方中声明RDEPENDS,以确保构建提供它们的包。
-
<packagename1> rdepends on <packagename2>, but it isn't a build dependency? [build-deps]
两个指定的包之间存在运行时依赖关系,但配方中没有任何明确的内容来启用 OpenEmbedded 构建系统以确保满足依赖关系。这种情况通常由在打包阶段而不是预先添加的RDEPENDS值触发 ,这通常是基于包的内容自动进行的。在大多数情况下,您应该更改配方为依赖项添加显式RDEPENDS。
-
non -dev/-dbg/nativesdk- package contains symlink .so: <packagename> path '<path>' [dev-so]
符号链接
.so
文件仅用于开发,因此应包含在-dev
包中。如果您添加*.so*
而不是添加*.so.*
到非开发包,则可能会发生这种情况 。更改 FILES(可能还有 PACKAGES),以便指定的.so
文件进入适当的-dev
包。
-
non -staticdev package contains static .a library: <packagename> path '<path>' [staticdev]
静态
.a
库文件应该放在一个-staticdev
包中。更改FILES(可能还有 PACKAGES),以便指定的.a
文件进入适当的-staticdev
包。
-
<packagename>: found library in wrong location [libdir]
指定的文件可能已安装到错误的(可能是硬编码的)安装路径中。例如,此测试将捕获安装
/lib/bar.so
时间${base_libdir}
为“lib32”的配方。另一个例子是当配方安装/usr/lib64/foo.so
时${libdir}
是“/usr/lib”。偶尔存在误报。对于这些情况,将“libdir”添加到 包的INSANE_SKIP。
-
non debug package contains .debug directory: <packagename> path <path> [debug-files]
指定的包包含一个
.debug
目录,该目录不应出现在-dbg
包之外的任何地方。如果您添加包含.debug
目录的路径并且没有显式地将.debug
目录添加到-dbg
包中,则可能会发生这种情况。如果是这种情况,请将.debug
目录显式添加到FILES_${PN}-dbg
. 有关FILES的其他信息,请参阅FILES。
-
Architecture did not match (<file_arch>, expected <machine_arch>) in <file> [arch]
默认情况下,OpenEmbedded 构建系统会检查任何二进制文件的可执行和可链接格式 (ELF) 类型、位大小和字节序,以确保它们与目标架构匹配。如果任何二进制文件与类型不匹配,则此测试将失败,因为会存在不兼容性。该测试可能表明使用了错误的编译器或编译器选项。有时,软件(如引导加载程序)可能需要绕过此检查。如果您收到错误的文件是不打算在目标操作系统中执行或打算在设备内的单独处理器上运行的固件,您可以为包添加“arch”到 INSANE_SKIP。另一种选择是检查do_compile日志并验证所使用的编译器选项是否正确。
-
Bit size did not match (<file_bits