Можно ли в Solaris использовать библиотеки, скомпилированные с помощью gcc, так же, как библиотеки, сгенерированные с помощью cc?

В настоящее время я пытаюсь скомпилировать libxml2 на Solaris. Когда я запускаю сценарий ./configure, поставляемый с исходниками, автоматически используются компиляторы gcc и g++. Однако я хотел бы использовать компиляторы cc и CC. Итак, я бегу:

./configure CC=cc CXX=CC

Это работает, но затем, когда я запускаю "make", я получаю некоторые ошибки, которые препятствуют созданию библиотек.

Когда используются gcc и g++, все идет хорошо, без ошибок, поэтому мне было интересно: могу ли я использовать библиотеки, сгенерированные с помощью gcc/g++, так же, как я бы использовал их, если бы последовательно сгенерировал их с помощью cc/CC ?

В чем разница между библиотекой, созданной с помощью cc, и той же библиотекой, созданной с помощью gcc в Solaris?


person louisiuol    schedule 08.07.2016    source источник
comment
Это, конечно, зависит от того, как был сконфигурирован GCC, но, естественно, он должен создавать объектные и исполняемые файлы в том же собственном формате, что и собственные компиляторы. В противном случае было бы невозможно использовать GCC вообще.   -  person Some programmer dude    schedule 08.07.2016
comment
@JoachimPileborg Хорошо, спасибо за ответ.   -  person louisiuol    schedule 08.07.2016


Ответы (1)


Вы можете использовать gcc или cc компиляторы C практически взаимозаменяемо.

Вы можете смешивать g++ и CC компиляторы C++ определенным образом, но только на x86 Solaris и если ваш компилятор CC достаточно новый, чтобы иметь доступную опцию -compat=g.

Компиляторы C++ GNU g++ и Solaris Studio CC по умолчанию используют совершенно разные ABI и библиотеки времени выполнения C++. На платформах x86 Solaris более новые версии (начиная с версии 12.?, если я правильно помню) предоставляют опцию -compat=g для использования g++ ABI и библиотек времени выполнения. Компилятор Studio 12.4 CC добавляет параметр -std=v для выбора различные версии g++ или Sun C++ ABI и библиотеки времени выполнения:

c++03 (ноль-3, а не oh-3)

Эквивалент опции -compat=g. Он выбирает диалект C++ 03 и g++ ABI; он бинарно совместим с g++ в Solaris и Linux. Он устанавливает для макроса препроцессора __SUNPRO_CC_COMPAT значение 'G'.

С++11

Выбирает диалект C++ 11 и двоичную совместимость с g++. Он устанавливает макрос __SUNPRO_CC_COMPAT preprocessor в 'G'.

c++0x (ноль-x, а не oh-x)

Эквивалент С++ 11.

а также

-std=c++03 обеспечивает совместимость с компилятором gcc/g++ на всех платформах Oracle Solaris и Linux.

С -std=c++03 бинарная совместимость распространяется только на общие (динамические или .so) библиотеки, а не на отдельные файлы .o или архивные (.a) библиотеки. Используемые заголовки и библиотеки gcc предоставляются вместе с компилятором, а не версией gcc, установленной в системе.

Обратите внимание, что компилятор Studio 12.4 CC использует заголовки g++ и библиотеки, поставляемые вместе с самим компилятором CC. 12.3 и более ранние версии используют заголовки и библиотеки g++, установленные в системе под /usr/sfw.

В SPARC Solaris вы должны использовать либо g++, либо CC для всего приложения.

person Andrew Henle    schedule 08.07.2016