Ссылка на неверную версию библиотеки в приложении C ++ - PullRequest
0 голосов
/ 08 октября 2010

Я устраняю неполадки двоичного файла C ++ в RHEL / CentOS 5, в котором есть проблемы с общими библиотеками openssl.Я не очень много занимаюсь программированием на C / C ++, и у меня возникают проблемы с поиском основной проблемы.

Кажется, что что-то идет не так, как надо: приложение ссылается на определенные версии libcrypto и libssl (0.9.8) вместо символьных путей /lib/libcrypto.so.6 и /lib/libssl.so.6.Поскольку библиотеки openssl были обновлены с момента его компиляции, он теперь не работает.

ldd показывает следующие 2 проблемы с двоичным файлом:

libcrypto.so.0.9.8 => not found
libssl.so.0.9.8 => not found

[РЕДАКТИРОВАТЬ] Я получил источник, и он построен правильно.Я собираюсь пойти с самым простым объяснением, машина для сборки была неправильно сконфигурирована с нестандартными библиотеками, и make-файлы в порядке.

Ответы [ 2 ]

0 голосов
/ 08 октября 2010

Несколько предложений (я предполагаю, что у вас нет возможности получить новый бинарный файл, который ссылается на новые версии ssl-библиотек):

  1. Получить старые версииlibs из предыдущей версии пакета и храните их только для вашего бинарного файла (вы можете поместить их куда-нибудь из / usr / lib и загрузить их только для вашей программы с помощью LD_LIBRARY_PATH).

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

0 голосов
/ 08 октября 2010

О, я бы неправильно прочитал вопрос, как поиск и устранение неполадок в бинарном файле, который вы создавали сами.


Вы можете использовать ldd your-binary, чтобы проверить, какие библиотеки будут загружаться во время выполнения.

Если он намеренно загружает другую версию, вам следует проверить среду LD_LIBRARY_PATH и загрузчикКонфигурация в /etc/ld.so.config для списка путей для загрузки библиотек.В качестве альтернативы путь к загрузчику может быть жестко запрограммирован в ваш двоичный файл с помощью переключателей -rpath на линии связи - найдите их в вашем Makefile.

...