[英]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/
)。
作为临时解决方法(以及学习如何处理 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#n314和http://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.