Скомпилировать на Sun Studio 12, запустить на Sun Studio 10
Мне нужно скомпилировать и связать программу для кого-то, кто будет работать на 64-битной машине Solaris 10 Sparc с Sun Studio 10.
У меня есть машина с Solaris 10 Sparc 64 bit, но я только смог найти Sun Studio 11 и 12 для загрузки на сайте Oracle. Похоже, что из-за своего возраста Sun Studio 10 недоступна для скачивания.
Мой вопрос, есть ли способ скомпилировать программу с использованием Studio 12 (с набором параметров флагов), чтобы она легко работала с Sun Studio 10?
Спасибо за руководство
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++