Как мне скомпилировать RHEL5-совместимую разделяемую библиотеку с машины RHEL6 с GCC 4.4.6?

Примечание: я разработчик для C # Windows, только вступая в мир C ++ / Linux.

У меня есть основанный на BOOST кросс-платформенный код C ++, который мне нужно скомпилировать как общую библиотеку для:

  • Windows
  • RHEL6
  • RHEL5 и
  • Solaris

У меня есть машины Windows и RHEL6, и я успешно скомпилировал их. Сборка соляриса на данный момент не важна.

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

Моя скомпилированная общая библиотека RHEL6 не будет работать на RHEL5, потому что следующая команда:

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

возвращает зависимость GLIBC2.7:

143: 00000000 0 FUNC GLOBAL DEFAULT UND eventfd@GLIBC_2.7 (14)
9069: 00000000 0 FUNC GLOBAL DEFAULT UND
eventfd @@ GLIBC_2.7

Мне было интересно, есть ли способ собрать для RHEL5 через машину RHEL6?
Или подойдет любое другое предложение. Благодарю.

1

Решение

Вы можете связать свою общую библиотеку с -Wl,-rpath,'$ORIGIN' и предоставить все необходимые библиотеки в одном каталоге.

Однако, если в заголовках вашей библиотеки есть что-то, что использует какие-либо типы из стандартной библиотеки C ++, вы напрашиваетесь на проблемы. Пользователям вашей библиотеки придется создавать и связывать свои приложения, используя один и тот же компилятор C ++ и стандартную библиотеку.

Наиболее переносимым вариантом является предоставление совместно используемой библиотеки с C API вместе с оболочками только для заголовков C ++, которые пользователи могут создавать с использованием любого компилятора C ++.

1

Другие решения


По вопросам рекламы [email protected]