在sun studio 12上编译,在sun studio 10上运行

时间:2012-09-20 06:28:03

标签: compiler-construction sun sunstudio

我需要编译和链接程序,以便某人在具有Sun Studio 10的Solaris 10 Sparc 64位计算机上运行。

我有一台装有Solaris 10 Sparc 64位的机器,但我只能在Oracle网站上找到Sun Studio 11和12。看来,由于它的年龄,Sun Studio 10无法下载。

我的问题是,有没有办法使用Studio 12编译程序(带有一组标志设置),以便它可以与Sun Studio 10无缝运行?

感谢您的指导

1 个答案:

答案 0 :(得分:3)

如果您使用一个版本的Studio(如11或12.x)构建程序,则不能指望链接到早期Studio版本的库。您没有说出您正在使用的编程语言,但问题最常见于Fortran和C ++。

例如,除非您采取措施避免此问题(请参见下文),否则使用STLport或Interval库的C ++程序将尝试在运行时链接到随编译器安装的共享库。如果程序是使用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 ++编译器团队