Код написан на c / c ++ , может зависеть от некоторых библиотек на компилирующем хосте; и он должен работать на другом хосте без проблем, связанных с библиотеками. Оба хоста - linux, могут иметь разные версии. У вас есть хорошая стратегия?
Linux, скомпилировать кусок кода на одном хосте, чтобы запустить на другом?
Ответы (4)
Чистая статическая компоновка в Linux не рекомендуется, это действительно возможно, только если вы используете альтернативный libc (например, dietlibc), который не подходит для C ++, мой favoured подход заключается в создании приложения на самой старой версии Linux, которую вы должны поддерживать, поскольку новые сборки libc будут иметь обратную совместимость.
Это будет охватывать только libc, другие требования, такие как gtk, pangom и т. Д., Должны быть скомпилированы непосредственно в ваш двоичный файл.
Свяжите приложение статически, чтобы оно зависело от как можно меньшего числа динамически загружаемых библиотек. Это общее решение этой проблемы.
Другие решения включают:
- Отправьте необходимые библиотеки вместе с приложением и переопределите системную переменную
LD_LIBRARY_PATH
, чтобы сделать включенные версии предпочтительными. - Напишите код для динамической загрузки библиотек с помощью
dlopen()
и его друзей и обработайте различия в версиях библиотек вручную.
Большинство платформ имеют четко определенный ABI, охватывающий код C, но ABI, охватывающие функциональность C ++, еще не распространены.
Программа, написанная на C ++ с использованием только libc, может не работать на другой платформе. если двоичная совместимость является важной проблемой, рассмотрите возможность использования c.
Примите во внимание все ответы на этот вопрос (статическое связывание, компиляция в самой старой версии Linux и т. Д.), А затем проверьте окончательный двоичный файл с помощью Linux App Checker, чтобы показать проблемы совместимости с другими дистрибутивами Linux.