32位64位兼容

时间:2009-08-28 15:17:19

标签: c 64-bit 32-bit

我正在开发一个可在64位计算机上运行的应用程序。

但是,我们使用的是具有32位整数的库,我们无法更改。我们需要在64位计算机上编译和运行。

应用程序运行时会产生什么影响?有什么工作吗?

非常感谢任何建议,

2 个答案:

答案 0 :(得分:2)

当你谈到64位时,我假设你的意思是x86和x86_64。

int在这两种架构上都是32位。

您倾向于遇到的唯一问题是您假设:

  • sizeof(void*) == sizeof(int)
  • sizeof(int) == sizeof(long)
  • longlong long的大小相同。

否则你会没事的。

答案 1 :(得分:1)

你有图书馆的资源吗?如果是这样,并且你重新编译它,你可能会侥幸逃脱它(只要库的编写者在编译x86-64时没有做出任何破坏的假设)。努力测试,并长时间测试。

如果拥有源(您只有i386编译的二进制文件),链接器甚至不允许您将x86-64代码链接到它。 ABI只是不兼容。

在第二种情况下,您必须创建一个链接到32位库的单独的32位帮助程序/包装程序进程,并通过IPC机制接受从64位进程调用库的请求(返回结果)。您可以在IPC周围的64位端创建包装函数,使其看起来像是对库的正常调用。您的64位进程在启动时必须启动32位辅助进程(并确保辅助进程知道在父进程消失时退出)。