如何在 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 不包含 ldd
或 file
。
编辑:我无法进一步隔离错误。关于可能导致这种情况的任何建议?我认为这是一个链接错误。
【问题讨论】:
试试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 中检查共享库依赖项的主要内容,如果未能解决你的问题,请参考以下文章