Путь поиска в библиотеке для libstdc ++ - PullRequest
1 голос
/ 05 апреля 2011

Я скомпилировал разделяемые библиотеки, динамически связанные с libstdc ++. Поэтому с помощью GLIBCXX_3.4.11. Я хочу отправить свой код кому-то, чья библиотека stdc ++ имеет версию 3.4.10. Вместо того, чтобы попросить его обновить версию библиотеки (это клиент программного обеспечения, поэтому я не могу предположить, что они захотят или смогут изменить системные файлы), я бы хотел отправить соответствующую версию libstdc ++. Папка lib с каталогом моего кода. Как получить собственный код для использования соответствующей (более поздней) версии? Я считаю, что /etc/ld.so.conf включает каталог / lib64, в котором находится более ранняя версия libstdc ++. Установка LD_LIBRARY_PATH не отменяет это. Это, кажется, отклоняется от рекламируемого поведения . Есть идеи, почему это происходит? Как мне выполнить мою довольно простую задачу?

Спасибо.

1 Ответ

2 голосов
/ 05 сентября 2011

Я понимаю, что этот вопрос старый, но я нашел его, пытаясь разобраться в собственной проблеме со связыванием, которая была похожей. Вы должны будете собрать свою программу на основе версии libstdc ++, которая совместима с версией библиотеки вашего коллеги. Самым простым решением, конечно, является создание ссылки на его версию библиотеки, чтобы ему не нужно было делать специальные настройки на своей стороне, чтобы связать вашу библиотеку.

Для этого вам нужно установить версию GCC, которая может создавать двоичные совместимые библиотеки, чтобы вы могли ссылаться на его версию libstdc ++. GLIBCXX_3.4.11 из gcc-4.4 и более поздних версий, поэтому вам потребуется gcc-4.3. Создайте свою программу, используя это, и вы должны быть в хорошей форме.

Вы можете обратиться к следующей странице для списка совместимости библиотек ABI: http://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html

Вы также можете создать rpm / deb, который требует версию libstdc ++, которая у вас уже есть, и, если она недоступна, отказаться от установки. Это дает вам немного интерфейса, который дает ему обещание, что если его система настроена с правильными зависимостями, он может использовать вашу библиотеку. В этом смысле это похоже на свободный SLA для вашей библиотеки в том, что вы делаете и не поддерживаете.

Надеюсь, это поможет!

...