2010-10-08 1 views
0

Я искал бинарный файл C++ на RHEL/CentOS 5, у которого есть проблемы с разделяемыми библиотеками openssl. Я не занимаюсь программированием на C/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 

[EDIT] я получил источник, и он построен правильно. Мне нужно пойти с самым простым объяснением, машина сборки была неправильно сконфигурирована с нестандартными библиотеками, а make-файлы в порядке.

ответ

0

D'oh, я неправильно понял вопрос, как устранить неисправность двоичного файла, который вы строили самостоятельно.


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

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

+0

К сожалению, в моем вопросе должен быть добавлен вывод ldd. – JimB

0

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

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

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

+0

Я знаю, что могу загружать более старые библиотеки, и я * думаю *, что я могу заставить их новые, предварительно загружая их или добавляя соответствующие символические ссылки, но я хочу отследить причину проблемы; как для себя, так что я могу узнать, что пошло не так, и поэтому я могу предоставить дополнительную информацию разработчику. – JimB

+0

К сожалению, неверный вопрос. Поиск этого выглядит так: libcrypto.so.6 является обычным именем для библиотек OpenSSL 0.9.8, поэтому я думаю, что ваш двоичный файл был создан кем-то, использующим другой дистрибутив, который называет их по-разному. В этом случае я бы пошел с 2 здесь или даже просто добавил символические ссылки в/lib для libcrypto.so.0.9.8 -> libcrypto.so.6 и т. Д. Я бы предположил, что ваши существующие библиотеки действительно будут работать. Только что просмотрел ваш комментарий: я бы спросил у вашего разработчика, что дистрибутив они используют, потому что я ожидаю, что это связано с этим. – Rup

+0

@Rup - он был * предположим *, который был построен на той же платформе;) Это хороший момент, который, возможно, был в системе, где библиотеки openssl просто назывались по-разному. Я пытаюсь перестроить его самостоятельно, чтобы проверить, но это тяжелая задача - ждать, пока QT будет компилироваться прямо сейчас. – JimB

Смежные вопросы