【问题标题】:Potential problems porting to different architectures移植到不同架构的潜在问题
【发布时间】:2010-04-22 00:29:28
【问题描述】:

我正在编写一个 Linux 程序,该程序目前可以在 x86 和 x86_64 上正常编译和运行,现在我想知道是否需要做一些特别的事情才能让它在其他架构上运行。

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

  • 不要假设指针、int 或 size_t 的大小
  • 不要对字节顺序做出假设(我不做任何位移 - 我假设 gcc 会优化我的两个乘法/除法的能力)
  • 不要使用组装块(很明显)
  • 确保您的库正常工作(我使用的是 SQLite、libcurl 和 Boost,它们看起来都非常跨平台)

还有什么我需要担心的吗?我目前没有针对任何其他架构,但我希望在某个时候支持 ARM,我想如果可以的话,我不妨让它在任何架构上工作。

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

【问题讨论】:

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


    【解决方案1】:

    根据我的经验,一旦代码在几个架构上运行良好,它就会更容易移植到第三个架构上。输入应该不是问题。如果您在对齐存在问题的情况下执行任何操作,则结构对齐可能会成为问题。

    注意任何可能与平台相关的事情:依赖位域以相同的方式对齐,假设变量具有特定大小等。如果您的代码相对于硬件抽象,您可能会遇到很少的问题。如果您使用网络代码之类的东西做某事,则必须确保正确地与网络字节顺序对齐。

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

    当然,唯一确定的方法就是尝试一下。

    【讨论】:

    • 是的,我希望如此,因为我的网络代码只是 curl,而且我的输入都是使用 cin 或 getline,所以不用担心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-07
    • 1970-01-01
    • 1970-01-01
    • 2011-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多