Могу ли я использовать общую библиотеку, скомпилированную в Ubuntu, на машине Redhat Linux?

Я скомпилировал общую библиотеку на своем рабочем столе Ubuntu 9.10. Я хочу отправить общую библиотеку соразработчику, у которого есть Red Hat Enterprise 5.

Может ли он использовать мою общую библиотеку на своей машине?


person Stick it to THE MAN    schedule 21.11.2009    source источник
comment
Я думаю, что вы должны быть, если компилятор такой же   -  person Xinus    schedule 21.11.2009


Ответы (5)


Первый момент: все ответы относительно версии компилятора кажутся ошибочными. Важны связи (и, конечно, архитектура).

Если вы скопируете файл .so в стартовую систему (например, в ее собственный каталог /usr/local/* или /opt/*), попробуйте запустить предполагаемый исполняемый файл, используя настройки среды LD_PRELOAD. Если компоновщику (ld-linux.so) удается разрешить все символы между ними, программа должна загрузиться и запуститься.

Таким образом, это должно быть возможно и достаточно безопасно (если вы не перезаписываете какие-либо существующие системные библиотеки и просто используете магию LD_ * /etc/ld.so.preload (в chroot?), Чтобы связать целевые исполняемые файлы с этой библиотекой.

Однако я считаю, что это плохая идея. У вас проблема с управлением пакетами. И в Ubuntu, и в Red Hat есть прекрасные инструменты для управления пакетами. Используй их! (Обратите внимание, что правильное место, чтобы задавать вопросы об управлении пакетами, было бы ServerFault или SuperUser, но определенно не SO).

person Jim Dennis    schedule 21.11.2009
comment
Спасибо, я прочитаю LD_PRELOAD и т. Д. И посмотрю, добьюсь ли я прогресса. Рассмотрю возможность создания пакета для его установки. - person Stick it to THE MAN; 27.11.2009

Маловероятно: вы бы не задали этот вопрос, если бы он просто сработал, не так ли?

Согласно DistroWatch, Ubuntu 9.10 использует glibc-2.10.1, а RHEL-5.4 использует glibc-2.5. Это означает, что если ваша библиотека ссылается на какие-либо символы с версиями GLIBC_2.6 и выше, она не будет работать в RHEL-5.

Вы можете сказать, используете ли вы такие символы (и какие) с:

readelf -s /path/to/your/library.so | egrep 'GLIBC_2.([6-9]|10)'

Если вывод не пустой, то библиотека не будет работать на RHEL-5.

Вы можете создать библиотеку, совместимую с RHEL-5, используя автопакет.

person Employed Russian    schedule 22.11.2009
comment
Очень понравился вывод readelf (аналог dumpbin на платформе Windows). Между прочим, выполнение указанной выше команды не соответствует ни одной из ошибочных строк, поэтому теоретически она должна работать. Однако я рассмотрю возможность использования диспетчера пакетов, как предложили и вы, и другой пользователь. - person Stick it to THE MAN; 27.11.2009

Присоединяюсь к Xinus. Компилятор IMHO, в случае Ubuntu и RHEL это будет gcc, тесно связан с glibc. Так что, если на обеих машинах это одно и то же, то, скорее всего, он может работать.

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

person dimba    schedule 21.11.2009

Лучшее решение - передать свой код вашему со-разработчику, и давайте его скомпилируем !!!!

У вас есть несколько решений

  • Обновление его gcc до той же версии, что и ваш
  • Установите его версию gcc на свой компьютер и скомпилируйте ее

Вы должны проверить, работаете ли вы с одной и той же архитектурой: 32 или 64 бита.

Я считаю, что у вас могут возникнуть проблемы, потому что вы, вероятно, не используете тот же самый glibc.

person Nadir SOUALEM    schedule 21.11.2009

Да, это возможно. Предоставьте партнеру статическую библиотеку и сохраните для своего gcc ту же или совместимую версию. вы можете проверить мою публикацию здесь: https://zqfan.github.io/2021/07/01/cpp-static-library/

person ZhiQiang Fan    schedule 01.07.2021