LINUX.ORG.RU

Linux, линковка .so

 , ,


0

2

Привет.

Компилирую файл

gcc test.c -lcy -lnv

Библиотеки libcy.so и libnv.so лежат в /usr/lib/. Но,

pi@raspberrypi ~ $ ldd a.out

/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so (0xb6f2b000)

libcy.so => not found

libnv.so => not found

libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0xb6de5000)

/lib/ld-linux-armhf.so.3 (0xb6f39000)

Сами библиотеки лежат на месте, если бы их не было, gcc выругался бы.

Аналогичная ситуация с dlopen(). Если динамически подключать библиотеку, dlerror() возвращает ошибку.

Ситуацию усложняет тот факт, что libcy и libnv - закрытые библиотеки, скомпилированные под ARM, и запускаемые на другом ARMе (как видно - на raspberrypi). Бинарная совместимость обоих платформ есть, но что-то паровоз не едет...

Куда копать, гуру?



Последнее исправление: cetjs2 (всего исправлений: 1)

Ответ на: комментарий от AF

Хмм. Видимо, что-то не так с самими либами:

pi@raspberrypi ~ $ /lib/ld-linux.so.3 --list /usr/lib/libcy.so

/usr/lib/libcy.so: error while loading shared libraries: /usr/lib/libcy.so: cannot open shared object file: No such file or directory

pi@raspberrypi ~ $ /lib/ld-linux.so.3 --list /usr/lib/libnv.so

/usr/lib/libnv.so: error while loading shared libraries: /usr/lib/libnv.so: cannot open shared object file: No such file or directory

Но что?

pi@raspberrypi ~ $ file /usr/lib/libcy.so

/usr/lib/libcy.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, stripped

pi@raspberrypi ~ $ file /usr/lib/libnv.so

/usr/lib/libnv.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, stripped

libdns
() автор топика
Ответ на: комментарий от naszar

Разница в

Flags: 0x4000002, has entry point, Version4 EABI

vs

Flags: 0x5000002, has entry point, Version5 EABI

libdns
() автор топика
Ответ на: комментарий от AF

Увы, все ld-*, найденные в системе, говорят одно и то же:

/usr/lib/libcy.so: error while loading shared libraries: /usr/lib/libcy.so: cannot open shared object file: No such file or directory

libdns
() автор топика
Ответ на: комментарий от libdns

cannot open shared object file: No such file or directory

Это говорит о том, что libcy и libnv зависят от других *.so, которых у тебя в системе нет. Покажи

ldd /usr/lib/libcy.so
ldd /usr/lib/libnv.so

mtk
()
Ответ на: комментарий от mtk

А тут вот так:

pi@raspberrypi ~ $ ldd /usr/lib/libcy.so not a dynamic executable

pi@raspberrypi ~ $ ldd /usr/lib/libnv.so not a dynamic executable

Остановился на различии версий EABI, ищу решение.

libdns
() автор топика
Ответ на: комментарий от libdns

not a dynamic executable

А вот это очень плохо, учитывая

file /usr/lib/libcy.so

/usr/lib/libcy.so: ELF 32-bit LSB shared object, ARM, version 1 (SYSV), dynamically linked, stripped
Значит, действительно, несовместимые архитектуры, решение в общем случае одно - пересборка, но для этих либ неприменимо. Еще можно собрать все остальное под ихнее EABI :)

mtk
()
Ответ на: комментарий от mtk

Да, придется или пересобирать все окружение, или искать другую среду для запуска (дистрибутив для raspberrypi).

libdns
() автор топика
Ответ на: комментарий от libdns

привет, если я не ошибаюсь то шаред либы нужно закидывать в системный каталог подключаемых библиотек, другими словами компилятор ищет либы по стандартному пути а не по тому который ты указал. А вот если ты соберёшь либы как статические то всё будет норм

Onito
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.