Скомпилируйте libstdc ++ с хеш-стилем SYSV

Есть ли способ скомпилировать GCC libstdc ++ с хэш-стиль SYSV вместо GNU / Linux? У меня есть набор инструментов (через crosstool-ng), который я использую для компиляции библиотеки нашей компании для работы с очень широким спектром систем Linux.

Одна из этих систем — очень старая RedHat, которая имеет только хэш-стиль SYSV. Когда я компилирую библиотеку / программу только на C с помощью цепочки инструментов, она прекрасно работает, так как сгенерированный двоичный файл использует SYSV.

Но когда я связываюсь с libstdc ++, двоичный файл автоматически меняется на стиль GNU / Linux, причина в том, что libstdc ++ был построен как GNU / Linux, поэтому возникает вопрос.

Запуск бинарного файла в этой системе выдает ошибку

ELF file OS ABI invalid

Просто для полноты я уже попробовал -Wl, — hash-style = sysv, но безуспешно.

Кроме того, у меня есть еще одна цепочка инструментов для системы ARM, которая имеет ту же версию GCC, GLIBC и т. Д., Но в этой цепочке инструментов libstdc ++ использует SYSV, не знаю почему.

Заранее спасибо!

4

Решение

Попробуйте восстановить свой GCC с —отключить-ГНУ уникальный объект- настроить вариант. В соответствии с документацией о настройках GCC:

—включить-ГНУ уникальный объект-

—отключить-ГНУ уникальный объект-

Указывает GCC использовать перемещение gnu_unique_object для элементов статических данных шаблона C ++ и локальной статики встроенных функций. По умолчанию включено для набора инструментов с ассемблером, который принимает его, и GLIBC 2.11 или выше, в противном случае отключено.

Использование gnu_unique_object может привести к появлению GNU ABI в вашем конечном исполняемом файле, который не поддерживается в старой Red Hat.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]