0

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

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

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

谢谢你的指导

4

1 回答 1

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

描述了构建分发程序的最佳实践,以便它们不依赖于编译器安装。

Steve Clamage Oracle C++ 编译器团队

于 2012-10-19T17:25:16.597 回答