Путь поиска библиотеки для libstdc++

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

Спасибо.


person dgorur    schedule 05.04.2011    source источник


Ответы (1)


Я понимаю, что этот вопрос устарел, но я нашел его, пытаясь разобраться со своей проблемой со ссылками, которая была похожей. Вам нужно будет собрать свою программу на версии 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 для вашей библиотеки в том, что вы делаете и что не поддерживаете.

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

person Ewan Higgs    schedule 05.09.2011
comment
Я только что понял, что мой ответ глуп, и вам следует просто использовать флаг -static, чтобы вам не нужно было управлять версиями библиотек при развертывании на компьютере вашего коллеги. - person Ewan Higgs; 14.04.2014