Я думаю, что gcc делает то же самое как MSVC, но конечно это не делает его "портативным".
я думаю, что можно работать вокруг проблемы, когда NUMELEMENTS является действительно постоянным временем компиляции, как так:
typedef A Arr[NUMELEMENTS];
А* p = новое (буферное) Прибытие;
Это должно использовать скалярное новое размещение.
Я думаю, что уловка состоит в том, чтобы использовать разновидность 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. Установка более новых версий компилятора имеет тенденцию к значительному ухудшению совместимости.
У Windows есть проблемы с совместимостью между различными версиями, пакетами обновления, установленными SDK и библиотеками DLL в целом (DLL, черт возьми?). Linux не застрахован от таких же проблем.
Проблемы совместимости, которые я видел, включают:
В вашем конкретном случае я бы попросил их выполнить «gcc -v» в своей системе и сообщить вам номер версии gcc. Сравните это с тем, что вы используете.
Возможно, вам придется раздобыть ту версию компилятора, чтобы построить свою половину.
Если формат сообщения не распознан, проблема, скорее всего, связана с проблемой, упомянутой elmarco в комментарии, а именно, с другой архитектурой. Возможно (я не уверен) несоответствие версии динамического компоновщика, но это будет означать, что файл .so был создан с помощью древнего динамического компоновщика. Я не верю, что это может быть вызвано какой-либо несовместимостью в libc - они могут вызвать сбои связи и проблемы во время выполнения (последнее очень редко), но не это.
Я не знаю насчет Сьюз, но знаю, что шляпа-федора любит быть на переднем крае. Так что насчет версий библиотеки вы вполне можете быть правы. Почему бы вам не спросить и не посмотреть, сможете ли вы получить исходный код и собрать его на своей машине Suse?