首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使Tru64 Unix中的C代码在Linux64位下工作?

如何使Tru64 Unix中的C代码在Linux64位下工作?
EN

Stack Overflow用户
提问于 2012-08-31 15:18:49
回答 3查看 385关注 0票数 1

我想知道在移植C程序时可能会遇到的问题。从Tru64 Unix到Linux 64位的服务器进程,为什么?程序需要做哪些可能的修改,或者只是在新的环境中重新编译源代码,因为两者都是64位平台?我有点困惑,在我开始工作之前,我必须知道。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-31 15:52:27

我在90年代初花了很多时间(天哪,我感觉自己老了…)将32位代码移植到的Alpha架构。这是在它被称为OSF/1的时候。

从Alpha转到x86_64时,您不太可能遇到与位宽度相关的任何困难。

例如,开发人员更多地意识到假设sizeof(int) == sizeof(void *)所导致的问题。这无疑是我在将代码移植到Alpha时遇到的最常见的问题。

在你发现差异的地方,他们会发现这两个系统在遵守不同的API规范方面有什么不同,例如POSIX,XOpen等。

如果Alpha代码使用了SVR4风格的API(例如streams),那么您可能会比使用更多类似于BSD的代码更困难。

票数 2
EN

Stack Overflow用户

发布于 2012-08-31 15:48:02

64位体系结构只是体系结构分类的近似值。

理想情况下,您的代码应该只对变量的所有描述使用“语义”类型,特别是用于大小和指针算法的size_tptrdiff_t,以及用于假定特定宽度的类型的[u]intXX_t

如果不是这样,主要的观点是比较所有的标准算术类型(所有整数类型、浮点类型和指针),如果它们在两个平台上映射到相同的概念。如果你发现了不同之处,你就知道潜在的麻烦点了。

票数 1
EN

Stack Overflow用户

发布于 2012-08-31 15:59:51

检查两个平台使用的64-bit data model,大多数64位类Unix操作系统都使用LP64,因此您的目标平台很可能使用相同的数据模型。在这种情况下,考虑到代码本身可以编译和链接,您应该会遇到一些问题。

如果你在两个平台上使用相同的编译器(例如,GCC),你也不需要担心不兼容的编译器扩展,或者在未定义或实现定义的行为上的差异。在任何情况下都应该避免这种行为-即使编译器是相同的,因为它可能在目标体系结构之间有所不同。如果您使用的不是相同的编译器,则需要谨慎使用扩展。#杂注指令是一个特别的问题,因为编译器被允许悄悄地忽略它不识别的#杂注。

最后,为了编译和链接,C标准库之外的任何库依赖项都需要在两个平台上都可用。大多数操作系统调用都是可用的,因为Unix和Linux共享相同的POSIX API。

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

https://stackoverflow.com/questions/12210606

复制
相关文章

相似问题

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