как проверить наличие зависимостей общей библиотеки вpetalinux

Я успешно скомпилировал образец приложения для Zynq Zedboard, используя arm-linux-gnueabi. Я запускаю на нем petalinux. Однако запуск приложения xiSample дает следующую ошибку:

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

Далее, ls -l в /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. РЕДАКТИРОВАТЬ: у меня возникли проблемы с дальнейшим выделением ошибки. Любое предложение о том, что может быть причиной этого? Я думаю, что это ошибка ссылки.


person gPats    schedule 14.03.2018    source источник
comment
Попробуйте strings <executable> | less. Первая строка должна быть компоновщиком/загрузчиком. Далее следуют наборы имени библиотеки (например, libxxx.so.n) и ее точки входа.   -  person sawdust    schedule 15.03.2018
comment
@sawdust команда показывает, что компоновщик — ld-linux.so.3, а библиотека, от которой он зависит, — libm3api.so.2. Спасибо   -  person gPats    schedule 15.03.2018
comment
Вы должны проверить наличие более одной библиотеки.   -  person sawdust    schedule 15.03.2018
comment
@sawdust команда, которую вы дали, не показывает точную версию, которая требуется, и не показывает библиотеки, необходимые для libm3api.so.2. Есть ли подобное выражение для readelf -d xiSample | НУЖЕН ?   -  person gPats    schedule 16.03.2018
comment
Последней библиотекой должна быть libc.so.n, за которой следуют ее точки входа. Номер версии — это «n» в конце имени файла. strings просто отображает печатные символы в исполняемом файле. Ни в коем случае он не может рекурсивно обращаться к другому файлу/библиотеке.   -  person sawdust    schedule 18.03.2018


Ответы (1)


В среде Petalinux вы можете сделать следующее:

readelf -d xiSample | НЕОБХОДИМО

Это перечислит необходимые динамические зависимости.

Аналогичный ответ здесь: https://unix.stackexchange.com/questions/120015/how-to-find-out-the-dynamic-libraries-executables-loads-when-run

person MTI    schedule 22.07.2019