Значение «не могу открыть общий объектный файл» - PullRequest
0 голосов
/ 02 мая 2020

Мой исполняемый файл компилируется, но затем не запускается, говоря, что не может загрузить общую библиотеку. Но именованная библиотека прямо здесь (и LD_LIBRARY_PATH также установлена ​​прямо здесь); и оба объекта имеют размер 64b.

$ l
-rwxrwxr-x  1 dario dario  13M May  2 17:46 pose-estimator* 
-rw-rw-r--  1 dario dario  12K May  2 19:52 Makefile
-rwxr-xr-x  1 dario dario 6.0M May  2 20:06 libmyelin.so.1*

$ make                                                                      
[100%] Built target pose-estimator     

$ pwd
/home/dario/nethra-pose-estimation/build

$ echo $LD_LIBRARY_PATH
/home/dario/nethra-pose-estimation/build

$ file pose-estimator libmyelin.so.1                                   
pose-estimator: ELF 64-bit LSB shared object, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/l, for GNU/Linux 3.2.0, BuildID[sha1]=598251a1370ca6547010a0c5d712738b4a698e57, with debug_info, not stripped               
libmyelin.so.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=c83470883245833a03e26dd8f1e4a23a5eb9c512, stripped                    

$ ./pose-estimator                                                                                                                                    
./pose-estimator: error while loading shared libraries: libmyelin.so.1: cannot open shared object file: No such file or directory                 

Что?

Почему динамический c компоновщик жалуется на ошибку при загрузке общих библиотек: libmyelin.so. 1: невозможно открыть общий объектный файл: нет такого файла или каталога "?

Какой следующий шаг отладки для решения этой проблемы?

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Кто жалуется на «ошибку при загрузке общих библиотек: libmyelin.so.1: не удается открыть файл общего объекта: нет такого файла или каталога»?

Dynami c компоновщик.

Какой следующий шаг отладки для решения этой проблемы?

Выполнить file pose-estimator libmyelin.so.1. Скорее всего, один из них является 64-разрядным (x86_64), а другой - 32-разрядным (i386).

Обновление:

Мое предположение было несколько неправильно: оба файла для x86_64. Но этот файл

libmyelin.so.1: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, BuildID[sha1]=c83470883245833a03e26dd8f1e4a23a5eb9c512, stripped                    

имеет неправильное значение (OS/ABI): ELFOSABI_SYSV вместо (ожидается) ELFOSABI_GNU. Загрузчик среды выполнения игнорирует файлы из «чужих» ОС.

PS Ваш pose-estimator поврежден: interpreter /lib64/l должно быть interpreter /lib64/ld-linux-x86-64.so.2.

0 голосов
/ 04 мая 2020

Fixed. Ошибка неинформативна. При указании LD_LIBRARY_PATH на TensorRT-7.0.0.11 / lib / (для которого нужны другие библиотеки), он запускается.

Итак, если вам кажется, что ничего не работает (как это было для меня), исследуйте библиотеку, которая динамически c компоновщик жалуется, проверьте, является ли он частью большего целого, и укажите LD_LIBRARY_PATH на местоположение с этим семейством библиотек.

...