移植到不同架构的潜在问题

时间:2010-04-22 00:29:29

标签: c++ linux gcc cross-platform arm

我正在编写一个目前在x86和x86_64上编译并运行良好的Linux程序,现在我想知道是否有任何特殊内容需要我在其他架构上运行。

我听说过对于跨平台代码我应该:

  • 不要假设指针的大小,int或size_t
  • 不要对字节顺序做出假设(我不做任何位移 - 我假设gcc会优化我的两次乘法/除法的功效)
  • 不要使用装配块(显而易见)
  • 确保您的库有效(我使用的是SQLite,libcurl和Boost,它们看起来都非常跨平台)

还有什么我需要担心的吗?我目前没有针对任何其他架构,但我希望在某些时候支持ARM,并且我认为如果可以的话,我也可以在任何架构上工作。

另外,关于我关于字节顺序的第二点,我是否需要对文本输入做一些特别的事情?我用getline()读取文件,所以看起来也应该自动完成。

1 个答案:

答案 0 :(得分:3)

根据我的经验,一旦代码在几个体系结构上运行良好,它将更容易移植到第三个。输入应该不是问题。如果你做对齐是一个问题的任何事情,结构对齐可能是一个问题。

注意可能与平台相关的任何事情:依赖于以相同方式对齐的位域,假设变量是特定大小等。如果您的代码从硬件中相对抽象,您可能会遇到一些问题。如果您正在使用网络代码等操作,则必须确保正确对齐网络字节顺序。

我已将设备驱动程序从PPC移植到x86,然后移植到x86_64;在几千行中,可能有一些变化,主要与结构和整数排序有关。

当然,唯一可以确定的方法是尝试。