首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在sun studio 12上编译,在sun studio 10上运行

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

Stack Overflow用户
提问于 2012-09-20 06:28:03
回答 1查看 750关注 0票数 0

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

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

我的问题是,是否有一种方法可以使用Studio 12 (带有一组标志设置)编译程序,这样它就可以在Sun Studio 10中无缝运行?

谢谢你的指导

EN

回答 1

Stack Overflow用户

发布于 2012-10-19 17:25:16

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

例如,除非您采取步骤避免这个问题(请参阅下面),否则使用C++或Interval库的STLport程序将尝试在运行时链接到与编译器一起安装的共享库。如果程序是用Studio 11或12.x构建的,那么与Studio 10库的链接将无法正常工作。

但是,如果程序只链接到/usr/lib中的默认运行时库,那么Studio是安装在目标系统上还是安装在哪个版本上并不重要。您可以通过在您构建程序的系统上运行"ldd“来确定是否是这种情况。

代码语言:javascript
复制
% ldd myprog

输出将显示程序使用的所有共享库,以及它们的来源。如果没有一个库位于编译器安装区域,则没有问题。

唯一的其他问题是Solaris的兼容性。如果在Solaris版本N上构建程序,则可以期望在Solaris N+1或更高版本上运行该程序,而不是在Solaris N1或更早版本上运行该程序。原因是Solaris保留了旧的接口,但是添加了新的接口。程序可能依赖于旧的Solaris版本中不存在的Solaris接口。特别是对于Solaris 10,以后的更新引入了新的特性和接口,而不是在早期的更新中。例如,如果您在更新10上构建一个程序,它可能不会在原始Solaris 10上运行。

此外,如果构建系统已经用C++运行时库(package SUNWlibC)的更高版本进行修补,则目标系统应该具有相同或更晚的修补程序。您可以通过运行以下命令来查找修补程序版本

代码语言:javascript
复制
% showrev -p | grep SUNWlibC

回到我最初对Studio附带的库的讨论,本文

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

描述构建分发程序以使其不依赖于编译器安装的最佳实践。

Steve甲骨文C++编译器团队

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12507109

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档