我正在开发一个可在64位计算机上运行的应用程序。
但是,我们使用的是具有32位整数的库,我们无法更改。我们需要在64位计算机上编译和运行。
应用程序运行时会产生什么影响?有什么工作吗?
非常感谢任何建议,
答案 0 :(得分:2)
当你谈到64位时,我假设你的意思是x86和x86_64。
int
在这两种架构上都是32位。
您倾向于遇到的唯一问题是您假设:
sizeof(void*) == sizeof(int)
sizeof(int) == sizeof(long)
long
或long long
的大小相同。否则你会没事的。
答案 1 :(得分:1)
你有图书馆的资源吗?如果是这样,并且你重新编译它,你可能会侥幸逃脱它(只要库的编写者在编译x86-64时没有做出任何破坏的假设)。努力测试,并长时间测试。
如果不拥有源(您只有i386编译的二进制文件),链接器甚至不允许您将x86-64代码链接到它。 ABI只是不兼容。
在第二种情况下,您必须创建一个链接到32位库的单独的32位帮助程序/包装程序进程,并通过IPC机制接受从64位进程调用库的请求(返回结果)。您可以在IPC周围的64位端创建包装函数,使其看起来像是对库的正常调用。您的64位进程在启动时必须启动32位辅助进程(并确保辅助进程知道在父进程消失时退出)。