我有一个 yocto 食谱,其中我将一些内容复制/安装到图像中。之后,我想在文件中添加一行/etc/ld.so.conf
,如下所示,以便动态加载器找到我的库文件:
do_install(){
# install some stuff...
echo /opt/myStuff/lib >> /etc/ld.so.conf
ldconfig
}
在构建过程中,我收到以下错误,该错误中止了构建过程:
...
| DEBUG: Python function extend_recipe_sysroot finished
| DEBUG: Executing shell function do_install
| /home/debian/Devel/myYocto/build/tmp/work/myTarget/myRecipe/1.0-r0/temp/run.do_install.3176: 203: cannot create /etc/ld.so.conf: Permission denied
| WARNING: exit code 2 from a shell command.
ERROR: Task (/home/debian/Devel/myYocto/poky/meta-myLayer/myRecipe/myRecipe.bb:do_install) failed with exit code '1'
现在我的问题是:如何通过/etc/ld.so.conf
在 yocto 配方中添加一行或编辑文件来向动态加载器添加自定义路径?
答案1
我想您希望在/etc/ld.so.conf
目标系统中添加该内容,但是
echo /opt/myStuff/lib >> /etc/ld.so.conf
会更改构建主机上的该文件。幸运的是,这会产生错误。
您的目标 rootfs 是$D
,因此您的文件将是 unter $D/etc/ld.so.conf
,但更一般而言,该文件不需要位于 中/etc
,因此您可以使用${D}${sysconfdir}/ld.so.conf
.
但随后您遇到了无法在 中执行此操作的问题do_install()
,因为不同的收据会生成单独的ld.so.conf
,从而导致冲突。因此,更好地使用ld.so.conf.d
:
install -d ${D}${sysconfdir}/ld.so.conf.d/
echo /opt/myStuff/lib >> ${D}${sysconfdir}/ld.so.conf.d/myStuff.conf
或者,更好的是,将该文件放入您的食谱中并执行
install -m 0755 ${WORKDIR}/myStuff.conf ${D}${sysconfdir}/ld.so.conf.d/
另外,不要ldconfig
在您的主机上运行。无论如何,一些 Yocto 魔法会更新你的库缓存。