取消
显示结果 
搜索替代 
您的意思是: 
Highlighted
Contributor
Contributor
609 次查看
注册日期: ‎05-23-2019

petalinux添加预先编译好的.so文件和头文件

转到解答

我按照UG1144v2018.3的指导,尝试向根文件系统中添加自定义的共享库和一些头文件,但是总是出现各种问题导致失败,比如在通过下面的方式添加预先编译好的共享库,然后运行petalinux-build -c rootfs:

#
# This file is the mylib recipe.
#

SUMMARY = "Simple mylib application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://libca.so \
	file://libCom.so \
	file://aaiRecord.h \
	file://aaoRecord.h \
	file://addrList.h \
	file://adjustment.h \
	file://aiRecord.h \
	file://aitConvert.h \
	file://aitHelpers.h \
	file://aitTypes.h \
	file://alarm.h \
	file://alarmString.h \
	file://aoRecord.h \
	file://asCa.h \
	file://asDbLib.h \
	file://asIocRegister.h \
	file://asLib.h \
	file://asTrapWrite.h \
	file://aSubRecord.h \
	file://biRecord.h \
	file://boRecord.h \
	file://bucketLib.h \
	file://cacIO.h \
	file://cadef.h \
	"

S = "${WORKDIR}"
TARGET_CC_ARCH += "${LDFLAGS}"

do_install() {
	     install -d ${D}/${libdir}
	     install -d ${D}/${includedir}/sample
	     install -m 0755 ${S}/libca.so ${D}/${libdir}
	     install -m 0755 ${S}/libCom.so ${D}/${libdir}
	     install -m 0755 ${S}/*.h ${D}/${includedir}/sample

}
FILES_${PN} = "${includedir}/* ${libdir}/*.so"
FILES_SOLIBSDEV = ""
INSANE_SKIP_${PN} = "ldflags"

到这里没有显示有错误而导致失败,然后新建一个app来引用刚刚加载到根文件系统中的库和头文件,bb文件如下:

#
# This file is the sampleapp recipe.
#

SUMMARY = "Simple sampleapp application"
SECTION = "PETALINUX/apps"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"

SRC_URI = "file://sampleapp.c \
		  "

S = "${WORKDIR}"


DEPENDS = "mylib"


do_compile() {
	     ${CC} ${CFLAGS} ${LDFLAGS} -o sampleapp sampleapp.c -lca -lCom
}

do_install() {
	     install -d ${D}${bindir}
	     install -m 0755 sampleapp ${D}${bindir}
}
FILES_${PN} += "sampleapp"

然后进行编译,console显示找不到libca.so库文件,(但是没有说找不到另一个libCom.so库文件):

ERROR: sampleapp-1.0-r0 do_package_qa: QA Issue: /usr/bin/sampleapp contained in package sampleapp requires libca.so, but no providers found in RDEPENDS_sampleapp? [file-rdeps]
ERROR: sampleapp-1.0-r0 do_package_qa: QA run found fatal errors. Please consider fixing them.
ERROR: sampleapp-1.0-r0 do_package_qa: Function failed: do_package_qa
ERROR: Logfile of failure stored in: /home/xlg/Documents/testAPP3/build/tmp/work/microblazeel-v10.0-bs-cmp-re-ml-xilinx-linux/sampleapp/1.0-r0/temp/log.do_package_qa.28761
ERROR: Task (/home/xlg/Documents/testAPP3/project-spec/meta-user/recipes-apps/sampleapp/sampleapp.bb:do_package_qa) failed with exit code '1'
NOTE: Tasks Summary: Attempted 575 tasks of which 574 didn't need to be rerun and 1 failed.

Summary: 1 task failed:
  /home/xlg/Documents/testAPP3/project-spec/meta-user/recipes-apps/sampleapp/sampleapp.bb:do_package_qa
Summary: There were 3 ERROR messages shown, returning a non-zero exit code.
ERROR: Failed to build sampleapp

实际上我才接触这个工具很短的时间,不知道有没有其他详细的关于如何将预编译好的库和头文件添加到根文件系统中的文档?

 

0 项奖励
1 个已接受解答

已接受的解答
Highlighted
Contributor
Contributor
412 次查看
注册日期: ‎05-23-2019

回复: petalinux添加预先编译好的.so文件和头文件

转到解答

我发现这两个库文件之间有依赖,并且不能将有版本号的文件作为真实文件,应该将有版本号的文件作为软链接文件,然后在一股脑的加上了RDEPENDS、在do_compile任务中加入了 -L/${libdir}后,sampleapp编译成功了。

在原帖中查看解决方案

7 条回复7
Highlighted
Xilinx Employee
Xilinx Employee
594 次查看
注册日期: ‎09-14-2018

回复: petalinux添加预先编译好的.so文件和头文件

转到解答

hi @xlgforever 

.so动态库是app运行时进行链接的,

从log中

no providers found in RDEPENDS_sampleapp?

来看,应该是缺少了在recipe中用RDEPENDS来指示run time的依赖。可以参考下yocto maual中的关于RDEPENDS的说明(Petalinux是基于Yocto项目的)。

https://www.yoctoproject.org/docs/1.8/ref-manual/ref-manual.html#var-RDEPENDS

供参考~

----------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
----------------------------------------------------------------------------------------------

 

0 项奖励
Highlighted
Contributor
Contributor
585 次查看
注册日期: ‎05-23-2019

回复: petalinux添加预先编译好的.so文件和头文件

转到解答

你好,

        我看过你发的链接的内容,但是在尝试之后发现对于解决该问题似乎没有帮助。

        现在感觉最主要的问题是,我的真实的共享库是libca.so.3.15.6和libCom.so.3.15.6,它们对应的软链接文件为libca.so和libCom.so,当创建应用后,把四个文件复制到应用目录下的files文件夹,查看复制过来的四个文件的属性,它们之间的软链接关系没有被破坏。

        而在bb文件中,将上述文件列在SRC_URI文件中,然后在bb文件中使用下列命令来安装这些预编译好的库:

install -m 0755 ${S}/libca..so  ${D}/${libdir}
install -m 0755 ${S}/libCom..so  ${D}/${libdir}
install -m 0755 ${S}/libca..so.3.15.6  ${D}/${libdir}
install -m 0755 ${S}/libCom..so.3.15.6  ${D}/${libdir}

在我之前做的几次试验中,有个错误告诉我FILES_{PN}-dev变量后面所包含的库必须是软链接文件,而不能是库本身(否则会报错:-dev contains non-symlink .so files,大概是这个错误),我尝试去查找原因,发现在执行上述命令后,查看${S}目录下和${D}/${libdir}目录下的这四个文件,它们之间的软链接关系已经被破坏了(即查看它们的属性发现libca.so和libcs.so.3.15.6都是真实的共享库,libCom.so同理)。

然后我尝试只复制真实的库文件libca.so.3.15.6和libCom.so.3.15.6,即只运行:

install -m 0755 ${S}/libca..so.3.15.6  ${D}/${libdir}
install -m 0755 ${S}/libCom..so.3.15.6  ${D}/${libdir}

然后手动创建它们的共享库,如下:

ln -s  ${S}/libca..so.3.15.6  ${S}/libca.so
ln -s  ${S}/libCom..so.3.15.6  ${S}/libCom.so
ln -s  ${D}/${libdir}/libca.so.3.15.6  ${D}/${libdir}/libca.so
ln -s ${D}/${libdir}/libCom.so.3.15.6 ${D}/${libdir}/libCom.so

但是又会出现新的错误说我不能使用绝对路径形式的软链接,而要使用相对路径形式的软链接。

所以我不知道该怎么办;但是感觉只是添加一些共享库和头文件到根文件系统中,为什么这么难呢,UG1144的说明也不是太清楚。

0 项奖励
Highlighted
Moderator
Moderator
575 次查看
注册日期: ‎05-23-2018

回复: petalinux添加预先编译好的.so文件和头文件

转到解答

Hi, @xlgforever 

直接把共享库文件通过install的方式安装是可以成功build的吗?如果对共享库不区分版本的话可以先不用软链接。

-------------------------------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
0 项奖励
Highlighted
Contributor
Contributor
546 次查看
注册日期: ‎05-23-2019

回复: petalinux添加预先编译好的.so文件和头文件

转到解答

按照UG1144v2018.3的第65张PDF的方法来添加库,是可以过通过编译的;

但是新建应用来引用刚刚编译到根文件系统中的库时就会报错,提示QA Issue:requires libca.so but no providers found in RDEPENDS_sampleapp?

所以还是不行

0 项奖励
Highlighted
Moderator
Moderator
470 次查看
注册日期: ‎05-23-2018

回复: petalinux添加预先编译好的.so文件和头文件

转到解答

Hi, @xlgforever 

有没有在<plnx-proj-root>/projectspec/meta-user/recipes-core/images/petalinux-image.bbappend中加入IMAGE_INSTALL_append=" <package_name>"选项?

-------------------------------------------------------------------------------------------------
Don’t forget to reply, kudo, and accept as solution.
-------------------------------------------------------------------------------------------------
如果提供的信息能解决您的问题,请标记为“接受为解决方案”。
如果您认为帖子有帮助,请点击“奖励”。谢谢!
-------------------------------------------------------------------------------------------------
0 项奖励
Highlighted
Contributor
Contributor
455 次查看
注册日期: ‎05-23-2019

回复: petalinux添加预先编译好的.so文件和头文件

转到解答

之前就看过了,程序已经自动加进去了

0 项奖励
Highlighted
Contributor
Contributor
413 次查看
注册日期: ‎05-23-2019

回复: petalinux添加预先编译好的.so文件和头文件

转到解答

我发现这两个库文件之间有依赖,并且不能将有版本号的文件作为真实文件,应该将有版本号的文件作为软链接文件,然后在一股脑的加上了RDEPENDS、在do_compile任务中加入了 -L/${libdir}后,sampleapp编译成功了。

在原帖中查看解决方案