繁体   English   中英

Yocto 不会将 libphp7.so 复制到 rootfs

[英]Yocto doesn't copy libphp7.so to rootfs

为了在 Yocto 中添加 php apache2 模块,我创建了一个文件recipes-devtools/php/php_%.bbappend ,其内容如下:

PACKAGECONFIG = " mysql sqlite3 imap opcache openssl ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 pam', d)} apache2"

LIBS_pn-php =" -lpthread "
export LIBS
THREADS_pn-php = "pthread"
export THREADS

模块已构建,但文件tmp-glibc/sysroots-components/cortexa7hf-neon-vfpv4/php/usr/lib/apache2/modules/libphp7.so未复制到 rootfs ( /usr/lib/apache2/modules/ )。

  1. 为什么它不部署文件?
  2. 作为临时解决方法(以及学习如何处理 Yocto 的路径),我正在尝试使用ROOTFS_POSTPROCESS_COMMAND手动部署它。 为避免使用绝对路径,我应该使用什么变量来查找tmp-glibc output 目录下的上述文件? 就像是:

    ${TMPDIR}/sysroots-components/cortexa7hf-neon-vfpv4/php/usr/lib/apache2/modules/libphp7.so

还是有更好的东西?

在 Yocto 中,当文件(在do_install中手动安装或通过 make、cmake、autotools 等...在do_compile中安装在${D}中)与正则表达式之一(或 glob ,不完全确定)包含在FILES_foo中。

一个配方可以(并且通常确实)提供多个包。 所以你会有多个FILES_foo1有自己的路径来匹配。

在 Yocto 中,文件放在第一个 package 中,其中FILE_foo中的一个路径与文件匹配。 即使该文件与其他包的路径匹配,它也只会出现在第一个 package 中。

FWIW,包是在配方中的PACKAGES变量中从最左到右创建的。 默认情况下,PACKAGES 变量是${PN}-src ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN} (参见${PN}-src ${PN}-dbg ${PN}-staticdev ${PN}-dev ${PN}-doc ${PN}-locale ${PACKAGE_BEFORE_PN} ${PN} ://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n292 )。

默认的FILES_*变量也在 bitbake.conf 中定义,c.f。 http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf 查找以FILES_开头的所有内容。

在那里,您可以看到默认情况下FILES_${PN}具有${libdir}/lib*${SOLIBS} (参见http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf /bitbake.conf#n296 )打包。 SOLIBS默认为.so.* (参见http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n280 ),这意味着仅打包了 dot 版本的库在${PN} package 中(如果它们之前没有被另一个 package 匹配)。 另一方面, FILES_${PN}-dev软件包${FILES_SOLIBSDEV}默认为${base_libdir}/lib*${SOLIBSDEV} ${libdir}/lib*${SOLIBSDEV} ,而SOLIBSDEV又默认为.so (参见http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n313,http ://git.yoctoproject.org/cgit.cgi/poky/tree/meta/ conf/bitbake.conf#n314http://git.yoctoproject.org/cgit.cgi/poky/tree/meta/conf/bitbake.conf#n283 )。 请注意,库文件名都应以lib开头,以便能够与默认FILES_*匹配。

TL;DR:默认情况下, FILES_${PN}中的lib*.so.*FILES_${PN}-dev中的lib*.so

对于您的具体问题,您可以看到${libdir}/apache2目录已打包在php-modphp中,这要归功于FILES_${PN}-modphp (参见http://git.openembedded.org/meta-openembedded/tree/meta -oe/recipes-devtools/php/php.inc#n243 )。

因此,您需要将 php-modphp(假设${PN}解析为 php)添加到您的图像中,以便能够将 lib 安装在您的 rootfs 中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM