1

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

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

应用程序运行时会产生什么影响?有什么解决办法吗?

非常感谢您的任何建议,

4

2 回答 2

2

当您谈论 64 位时,我假设您在这里指的是 x86 和 x86_64。

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

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

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

否则你会没事的。

于 2009-08-28T15:22:45.860 回答
1

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

如果你没有源代码(你只有一个 i386 编译的二进制文件),链接器甚至不会让你将 x86-64 代码链接到它。ABI 只是不兼容。

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

于 2009-08-29T02:09:35.110 回答