скомпилировать на Sun Studio 12, запустить на Sun Studio 10

Мне нужно скомпилировать и связать программу для запуска на 64-битной машине Solaris 10 Sparc с Sun Studio 10.

У меня есть машина с 64-разрядной версией Solaris 10 Sparc, но я смог найти для загрузки только Sun Studio 11 и 12 на сайте Oracle. Кажется, что из-за своего возраста Sun Studio 10 недоступна для скачивания.

Мой вопрос: есть ли способ скомпилировать программу с помощью Studio 12 (с набором настроек флага), чтобы она без проблем работала с Sun Studio 10?

Спасибо за руководство


person user823848    schedule 20.09.2012    source источник


Ответы (1)


Если вы создаете программу с одной версией Studio (например, 11 или 12.x), вы не можете рассчитывать на ссылки на библиотеки из более ранних версий Studio. Вы не говорите, какой язык программирования вы используете, но проблема чаще всего встречается с Fortran и C++.

Например, если вы не предпримете шаги, чтобы избежать этой проблемы (см. ниже), программы на C++, использующие библиотеки STLport или Interval, будут пытаться во время выполнения связываться с общими библиотеками, установленными вместе с компилятором. Если программа была собрана с помощью Studio 11 или 12.x, линковка с библиотеками Studio 10 не будет работать.

Однако, если программа ссылается только на библиотеки времени выполнения по умолчанию в /usr/lib, то, установлена ​​ли Studio в целевой системе или какая версия установлена, не имеет значения. Вы можете узнать, так ли это, запустив "ldd" в своей программе в системе, где вы ее создали:

% ldd myprog

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

Единственная другая проблема — совместимость с Solaris. Если вы создаете программу для Solaris версии N, вы можете ожидать, что программа будет работать в Solaris N+1 или более поздней версии, но не в Solaris N-1 или более ранней версии. Причина в том, что Solaris сохраняет старые интерфейсы, но добавляет новые. Программа может зависеть от интерфейса Solaris, отсутствующего в более ранней версии Solaris. В частности, для Solaris 10 более поздние обновления представили новые функции и интерфейсы, которых не было в более ранних обновлениях. Например, если вы создаете программу на основе обновления 10, она может не работать на исходной версии Solaris 10.

Кроме того, если система сборки была исправлена ​​с помощью более поздней версии библиотек времени выполнения C++ (пакет SUNWlibC), целевая система должна иметь такой же или более поздний патч. Узнать версию патча можно, выполнив команду

% showrev -p | grep SUNWlibC

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

http://www.oracle.com/technetwork/articles/servers-storage-dev/linkinglibraries-396782.html

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

Стив Кламейдж Команда компилятора Oracle C++

person Steve Clamage    schedule 19.10.2012