如何在 petalinux 中检查共享库依赖项

Posted

技术标签:

【中文标题】如何在 petalinux 中检查共享库依赖项【英文标题】:how to check for shared library dependancies in petalinux 【发布时间】:2018-03-14 18:16:44 【问题描述】:

我已经成功地使用 arm-linux-gnueabi 为 Zynq Zedboard 交叉编译了一个示例应用程序。我在上面运行 petalinux。但是运行应用程序 xiSample 会出现以下错误:

./xiSample: error while loading shared libraries: /usr/lib/libm3api.so.2: internal error

此外, ls -l on /usr/lib/ 给出:

root@xiAPI:/usr/lib# ls -l
lrwxrwxrwx    1 root     root            42 Mar 13  2018 ld-linux-
armhf.so.3 -> /usr/arm-linux-gnueabihf/lib/sf/ld-2.23.so
-rwxr-xr-x    1 root     root         45556 Mar 13  2018 libjbig.so.2
-rwxr-xr-x    1 root     root         15284 Mar 13  2018 
libjbig85.so.2.0
-rwxr-xr-x    1 root     root        222748 Mar 13  2018 libjpeg.so.8
-rwxr-xr-x    1 root     root        222748 Mar 13  2018 
libjpeg.so.8.1.2
-rwxr-xr-x    1 root     root        193248 Mar 13  2018 liblzma.so.5
-rwxr-xr-x    1 root     root        193248 Mar 13  2018 
liblzma.so.5.2.3
lrwxrwxrwx    1 root     root            13 Jan  1 00:54 libm3api.so -
> libm3api.so.2
lrwxrwxrwx    1 root     root            17 Jan  1 00:58 libm3api.so.0 
-> libm3api.so.0.0.0
-rwxr-xr-x    1 root     root      19850208 Jan  1 00:54 
libm3api.so.0.0.0
lrwxrwxrwx    1 root     root            17 Jan  1 00:58 libm3api.so.2 
-> libm3api.so.2.0.0
-rwxr-xr-x    1 root     root      23453232 Jan  1 00:54 
libm3api.so.2.0.0
-rwxr-xr-x    1 root     root        441068 Mar 13  2018 libtiff.so.5
-rwxr-xr-x    1 root     root        441068 Mar 13  2018 
libtiff.so.5.3.0
-rwxr-xr-x    1 root     root          9760 Mar 13  2018 
libtiffxx.so.5
-rwxr-xr-x    1 root     root          9760 Mar 13  2018 
libtiffxx.so.5.3.0
-rwxr-xr-x    1 root     root        106100 Mar 13  2018 libz.so.1
-rwxr-xr-x    1 root     root        106100 Mar 13  2018 
libz.so.1.2.11
lrwxrwxrwx    1 root     root            18 Jan  1 00:56 m3api -> 
/opt/XIMEA/include
drwxr-xr-x    3 root     root          4096 Feb 22  2018 opkg

如何找到我的可执行文件需要的共享库,因为 petalinux 不包含 lddfile。 编辑:我无法进一步隔离错误。关于可能导致这种情况的任何建议?我认为这是一个链接错误。

【问题讨论】:

试试strings <executable> | less。第一行应该是链接器/加载器。随后是一组库名称(例如 libxxx.so.n)及其入口点。 @sawdust 命令显示链接器是 ld-linux.so.3,它所依赖的库是 libm3api.so.2。谢谢 您应该检查多个库。 @sawdust 您提供的命令未显示所需的确切版本,也未显示 libm3api.so.2 所需的库。 readelf -d xiSample | 有没有类似的表达?需要 grep 吗? 最后一个库应该是 libc.so.n,后跟其引用的入口点。版本号是文件名末尾的“n”。 strings 只是在可执行文件中显示可打印字符。它不可能递归地访问另一个文件/库。 【参考方案1】:

在 Petalinux 环境中,您可以这样做:

readelf -d xiSample |需要grep

这将列出所需的动态依赖项。

这里有一个类似的答案:https://unix.stackexchange.com/questions/120015/how-to-find-out-the-dynamic-libraries-executables-loads-when-run

【讨论】:

以上是关于如何在 petalinux 中检查共享库依赖项的主要内容,如果未能解决你的问题,请参考以下文章

与 distutils 共享库依赖项

将具有外部依赖项的共享库集成到 MATLAB |即犰狳、LAPACK、BLAS

sbt共享项目之间的依赖关系

gcc 将共享库与依赖库链接

通过 Grab 添加的外部库的可选依赖项不可用

如何在同一个 monorepo 中的 Python 项目之间共享开发依赖项?