Существуют ли какие-либо особенности или различия между дистрибутивами, которые могут повлиять на двоичные файлы C++, скомпилированные с помощью GCC 4.7.x в одном дистрибутиве, которые используются непосредственно в другом? Я понимаю, что идеальной ситуацией является компиляция из исходного кода на втором дистрибутиве, но я действительно предпочел бы не беспокоиться о компиляции новых версий GCC и исходного кода программы на моей производственной машине. Я относительно неопытный пользователь Linux (отсюда и вопрос!) и по-прежнему предпочитаю IDE, а не компиляцию из командной строки, ssh - это все, что я действительно могу использовать для доступа к производственной машине.
Сам код не представляет собой ничего интересного, но он использует некоторые стандартные средства ОС, такие как блокировка сокетов и тому подобное.
Любой совет будет принят с благодарностью!
Ответ 2 · рейтинг 3 · Dirk Holsopple
G++ уже давно имеет стабильный ABI, так что это не должно вызывать проблем. Что может вызвать проблемы, так это использование динамически подключаемых библиотек. Система, в которой выполняется программа, должна иметь совместимые версии любых общих библиотек, с которыми был скомпилирован исполняемый файл. Если вы используете только статическую ссылку, у вас не должно возникнуть проблем. Вы можете включить статическое связывание с помощью параметра -static.
Ответ 3 · рейтинг 3 · idefixs
При статической связи должны выполняться два условия:
1) Целевая система и система сборки должны иметь одинаковую архитектуру (с исключениями: вы можете запускать 32-битные двоичные файлы на многих 64-битных хостах)
2) Пакет (g)libc в целевой системе не должен быть старше версии, чем в системе сборки (иногда вы можете избежать незначительных различий в версиях)
С динамической связью все сложнее.
Ответ 4 · Tsuneo Yoshioka
Как правило, бинарные файлы, созданные на основе более нового дистрибутива, не работают со старой версией, но двоичные файлы, созданные на основе более старого дистрибутива, будут работать с более новым дистрибутивом. На данный момент, если вы собираете двоичный файл на RedHat EL4, он будет работать в большинстве поддерживаемых дистрибутивов (вам может потребоваться скопировать libstdc++, если он отсутствует)