Порт C ++ 14 Linux-приложения для Solaris 10 и 11 - PullRequest
0 голосов
/ 07 марта 2019

В настоящее время переносится существующее Linux-приложение c ++ на Solaris 10 и 11 (сначала x86, затем SPAARC).

Начал с установки gcc5g ++ на солярис 10 и начал компиляцию.Получил ошибки в math.h и обнаружил, что это ошибка в версии g ++ 5.5, которую я установил.Из-за этой ошибки я получаю сообщения об ошибках типа


/ opt / csw / lib / gcc / i386-pc-solaris2.10 / 5.5.0 / include-fixed / math.h: 53: 12:ошибка: 'std :: double_t' не был объявлен с использованием std :: double_t;^

/ opt / csw / lib / gcc / i386-pc-solaris2.10 / 5.5.0 / include-fixed / math.h: 55: 12: ошибка: «std :: fpclassify» не имеетобъявлено с использованием std :: fpclassify;^

/ opt / csw / lib / gcc / i386-pc-solaris2.10 / 5.5.0 / include-fixed / math.h: 56: 12: ошибка: «std :: isfinite» не имеетобъявлено с использованием std :: isfinite;^


Так как мое приложение использовало конструкции c ++ 14, которые g ++ 4.92 не поддерживает полностью.Нужна более поздняя версия g ++ (выше 5.5)

Я не смог найти пакетов, из которых можно установить более позднюю версию g ++ на Solaris 10, поэтому я использовал установленную на Solaris 11 машину g ++ 7.3, пытаясь выполнитьисполняемый файл, созданный в Solaris 11 для Solaris 10 Я получаю следующую ошибку:


ld.so.1: hellod: fatal: libc.so.1: версия 'SUNWpublic' не найдена (требуется для файла /Рабочий стол / hellod) ld.so.1: hellod: fatal: libc.so.1: открыть не удалось: нет такого файла или каталога Убито


Вопросы

  • Существуют ли другие способы устранения ошибок, с которыми я сталкиваюсь?
  • Могу ли я скомпилировать на Solaris 11 и заставить его работать на Solaris 10?
  • Каковы другие способы установки более поздних версий на g ++ на Solaris 10?
  • Какие есть другие альтернативы, которые я могу использовать для компиляции / переноса этого приложения?

Спасибо всем за помощь и указатели, связанные с этой темой.

1 Ответ

2 голосов
/ 07 марта 2019

Во-первых, для поддержки более поздних стандартов C ++ ваша установка Solaris 10 должна быть обновленной.См. Невозможно включить cmath с использованием GCC 5.5 на Solaris 10 для примера того, почему.Прочитайте комментарии - есть исправления, которые необходимо применить к Solaris 10, чтобы сделать его совместимым с C ++ 11 и, предположительно, C ++ 14.

Как правило, вы не можете скомпилировать в Solaris 11 и запуститьполучившийся двоичный файл в Solaris 10.

Хорошо, вы должны быть в состоянии скомпилировать на Solaris 10 и нормально работать на Solaris 11, так что вам не нужно будет поддерживать две отдельные среды или отправлять две отдельныеСолярис продукты.Вы захотите проверить это с вашими двоичными файлами, но в теории это должно работать - и по моему опыту, это работает .

Я не могу найти более поздние версии (позже, чем5-кое-что) для Solaris 10, так что вам, вероятно, придется загружать собственную версию GCC 7-что-то или позже.См. https://unix.stackexchange.com/questions/446760/how-to-build-a-gcc-4-9-0-successfully-on-solaris-10-sparc для примера построения GCC 4.9.0 на Solaris 10 SPARC.Обратите внимание, что поддержка GCC для Solaris 10, вероятно, скоро прекратится, согласно этой публикации: https://gcc.gnu.org/ml/gcc/2018-10/msg00139.html:

Поэтому я думаю, что пришло время устареть поддержки этой версии в GCC 9, и, следовательно, удалить ее в GCC 10.

Я не собирал GCC на Solaris 10 уже несколько лет, поэтому я не знаю, с чем вы можете столкнуться при создании GCC 7 или 8.

Еще один возможный вариантальтернативой является использование Oracle Developer Studio вместо GCC.Версия 12.6 поддерживает C ++ 14 и доступна как для Solaris 10, так и для 11.

Одно предостережение - как бы вы ни компилировали, вы почти наверняка захотите статически связать оба libgcc и libstdc++, особенно еслиВы компилируете свой собственный GCC.

...