【问题标题】:C++ how to convert x64bit application to x86C ++如何将x64位应用程序转换为x86
【发布时间】:2013-01-08 15:39:10
【问题描述】:

我有几个关于 x64 和 x86 系统的问题

我在 qt 4.7 中编写了一个 C++ 应用程序,通常我将 int 用于整数等。

如果我想将此应用程序转换为 x64 位,我应该怎么做?

我应该只使用不同的编译器选项构建它还是应该在我的代码中更改某些内容

另一个问题,如果我下载一个开源应用程序并在 Linux 中构建它,它将是 x64 还是 x86,我的意思是如果我在 x64bit Linux 中构建源代码,我将获得一个 x64 应用程序,如果我构建x86bit Linux 中的源码我会得到一个 x86 应用程序

【问题讨论】:

  • 您使用 Qt 处理 整数?
  • 输出取决于命令行选项,而不是您运行的操作系统。例如,您可以使用 x86 CPU 运行 PC,但为 ARM 移动设备构建代码。那是cross-compilation。 x86 gcc 可以发出 32 位和 64 位代码,甚至 x32 带有 64 位代码但 32​​ 位指针

标签: c++ build x86 64-bit


【解决方案1】:

构建类型应取决于您构建的编译器和架构。

也就是说,应该(应该)编写代码,以便支持使用不同的位深度进行构建。

例如,如果您使用long 声明整数变量,则变量的大小会有所不同(取决于架构)。如果您改为使用std::int32_t 或std::int64_t 声明它,则在架构之间切换时大小将保持不变。

除了位深度,您还应该确保任何依赖字节序的代码继续正确运行(除了位深度和字节序之外,可能还有其他因素需要注意)。

总之,您可能只是在新架构上重新编译代码并且它可以工作,或者您可能需要进行一些编辑。我想这取决于你的代码做什么以及它是如何编写的。

【讨论】:

  • 使用std::int32_t 只能保证在您切换到另一个具有 32 位整数类型的架构时大小是恒定的。对于这种可移植性,int_least32_t 比 int32_t 好得多,但这里都不需要,因为 long 将始终至少为 32 位。
  • 构建的类型主要取决于你的编译方式,而不是你编译的架构。虽然默认为您自己的架构构建,但许多编译器接受更改目标架构的标志。例如,在 64 位环境中构建 32 位应用程序是很常见的(尽管相反的情况不太常见)。
【解决方案2】:

是的,您可能只需要重新编译它。在(大多数?)64 位架构上,int 的大小仍然是 32 位。

第二个问题的答案是,除非你告诉编译器,否则它可能会为你编译它的平台构建。输入 uname -m 会告诉你是哪一个。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-07
    • 1970-01-01
    • 2010-09-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多