Совместимость на уровне двоичных кодов между дистрибутивами Linux

Я думаю, что gcc делает то же самое как MSVC, но конечно это не делает его "портативным".

я думаю, что можно работать вокруг проблемы, когда NUMELEMENTS является действительно постоянным временем компиляции, как так:

typedef A Arr[NUMELEMENTS];

А* p = новое (буферное) Прибытие;

Это должно использовать скалярное новое размещение.

5
задан linuxbuild 21 January 2011 в 13:56
поделиться

4 ответа

Я думаю, что уловка состоит в том, чтобы использовать разновидность Linux с самым старым ядром и версиями библиотеки C любой из платформ, которые вы хотите поддерживать. В своей работе мы основываемся на Debian 4, что позволяет нам официально поддерживать Debian 4 и выше, RedHat 3,4,5, SuSE 10 и другие различные дистрибутивы (SELinux и т. Д.) Неофициально.

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

(править) Я должен упомянуть, что мы используем компилятор по умолчанию, который поставляется с Debian 4, я думаю, это GCC 4.1.2. Установка более новых версий компилятора имеет тенденцию к значительному ухудшению совместимости.

SuSE 10 плюс другие различные дистрибутивы (SELinux и т. Д.) Неофициально.

Я подозреваю, что при построении хорошей новой версии Linux становится трудно поддерживать людей на старых машинах.

(править) Я должен упомянуть что мы используем компилятор по умолчанию, который поставляется с Debian 4, я думаю, это GCC 4.1.2. Установка более новых версий компилятора имеет тенденцию к значительному ухудшению совместимости.

SuSE 10 плюс другие различные дистрибутивы (SELinux и т. Д.) Неофициально.

Я подозреваю, что при построении хорошей новой версии Linux становится трудно поддерживать людей на старых машинах.

(править) Я должен упомянуть что мы используем компилятор по умолчанию, который поставляется с Debian 4, я думаю, это GCC 4.1.2. Установка более новых версий компилятора имеет тенденцию к значительному ухудшению совместимости.

3
ответ дан 13 December 2019 в 05:37
поделиться

У Windows есть проблемы с совместимостью между различными версиями, пакетами обновления, установленными SDK и библиотеками DLL в целом (DLL, черт возьми?). Linux не застрахован от таких же проблем.

Проблемы совместимости, которые я видел, включают:

  • Изменения библиотеки времени выполнения
  • Изменения библиотеки ссылок
  • Изменения ядра
  • Изменения технологии компилятора (например: pre и опубликуйте версии EGCS gcc. Это может быть ваша проблема).
  • Проблемы с упаковщиком (RPM или APT)

В вашем конкретном случае я бы попросил их выполнить «gcc -v» в своей системе и сообщить вам номер версии gcc. Сравните это с тем, что вы используете.

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

3
ответ дан 13 December 2019 в 05:37
поделиться

Если формат сообщения не распознан, проблема, скорее всего, связана с проблемой, упомянутой elmarco в комментарии, а именно, с другой архитектурой. Возможно (я не уверен) несоответствие версии динамического компоновщика, но это будет означать, что файл .so был создан с помощью древнего динамического компоновщика. Я не верю, что это может быть вызвано какой-либо несовместимостью в libc - они могут вызвать сбои связи и проблемы во время выполнения (последнее очень редко), но не это.

1
ответ дан 13 December 2019 в 05:37
поделиться

Я не знаю насчет Сьюз, но знаю, что шляпа-федора любит быть на переднем крае. Так что насчет версий библиотеки вы вполне можете быть правы. Почему бы вам не спросить и не посмотреть, сможете ли вы получить исходный код и собрать его на своей машине Suse?

0
ответ дан 13 December 2019 в 05:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: