LINUX.ORG.RU

error loading library


0

0

Здравствуйте! В общем есть прока под которую была написана .so либа. Успешно скомпилирована на своей машине и подгружена нужной программой. После компиляции на другой машине и запуска программы получаю сообщение об ошибке error loading library /usr/local/some/foo/abi.so Как определитть что не так?


При попытке прикомпилировать статически libmysqlclient выводит такую ошибку. localhost ja # gcc -I./ -I/usr/include/mysql -fPIC abi.c -shared -o abi.so /usr/lib/mysql/libmysqlclient.a /usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/../../../../x86_64-pc-linux-gnu/bin/ld: /usr/lib/mysql/libmysqlclient.a(libmysql.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC /usr/lib/mysql/libmysqlclient.a: could not read symbols: Bad value collect2: ld returned 1 exit status

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

>При попытке прикомпилировать статически libmysqlclient выводит такую ошибку. localhost ja # gcc -I./ -I/usr/include/mysql -fPIC abi.c -shared -o abi.so /usr/lib/mysql/libmysqlclient.a /usr/lib/gcc/x86_64-pc-linux-gnu/4.1.2/../../../../x86_64-pc-linux-gnu/bin/ld: /usr/lib/mysql/libmysqlclient.a(libmysql.o): relocation R_X86_64_32 against `a local symbol' can not be used when making a shared object; recompile with -fPIC /usr/lib/mysql/libmysqlclient.a: could not read symbols: Bad value collect2: ld returned 1 exit status

Пересобрать libmysqlclient.a с -fPIC

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

реальне? т.есть нужно что взять исходникк и пересобрать с этим ключем и я и мой начальник будет счастлив? Чет я запутался. Вроде бы здесь проблема с тем что эта штука собирается для 64 бит платформы генту 64. Но с другой стороны клиент очень даже работает, те libmysqlclient должна работать хорошо. Так накой хрен она меня просит пересобрать этулибу? Так и в чем ошибка собственно?

jeep
() автор топика

Что что. Собрана с gcc(?) флагами под одно железо, а запущена на другом. Собери с универсальными generic, или только с i386 если намерен переносить с хоста на хост.

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

В общем работает на ubuntu 32 bit 9.04. Перекомпилировал на сервере Gentoo 64 bit с динамически подключаемой библиотекой libmysqlclient(успешно все откомпилировалось-на выходе abi.so) попробовал запустить программу. Получил ошибку error loading library /usr/local/billing/backup-masspay/abi.so Попробовал откомпилировать статически,ну а результат собственно выше. Может попробовать gdb отдебажить?

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

Не знаю в чем пробема при компиляции на гентоо, но сейчас я откомпилировал на своей кубунте прилинковав либу статически и у меня все заработало. Жаль что никто не сталкивался с такими ошибками. Хотелось бы до конца разобраться.

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

Детишек еще не обучили тому, что такое position independent code? Радуйся, что добрые дядьки научили линкера ругаться на такие вещи, а то бы ловил мистические сегфолты в рантайме.

По теме: судя по всему, твоя abi.so отсутствует в путях поиска библиотек. Как поправить:

1. отредактировать /etc/ld.so.conf и добавить туда каталог, в котором лежит библиотека, запустить ldconfig от рута и радоваться жизни

2. установить переменную LD_LIBRARY_PATH, чтобы она указывала на каталог с abi.so

3. (самый плохой способ) -Wl,-rpath каталог_с_abi.so при создании бинарника.

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