Примечание: я разработчик для C # Windows, только вступая в мир C ++ / Linux.
У меня есть основанный на BOOST кросс-платформенный код C ++, который мне нужно скомпилировать как общую библиотеку для:
У меня есть машины 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?
Или подойдет любое другое предложение. Благодарю.
Вы можете связать свою общую библиотеку с -Wl,-rpath,'$ORIGIN'
и предоставить все необходимые библиотеки в одном каталоге.
Однако, если в заголовках вашей библиотеки есть что-то, что использует какие-либо типы из стандартной библиотеки C ++, вы напрашиваетесь на проблемы. Пользователям вашей библиотеки придется создавать и связывать свои приложения, используя один и тот же компилятор C ++ и стандартную библиотеку.
Наиболее переносимым вариантом является предоставление совместно используемой библиотеки с C API вместе с оболочками только для заголовков C ++, которые пользователи могут создавать с использованием любого компилятора C ++.