【发布时间】:2017-04-07 22:15:52
【问题描述】:
我有一个 32 位运行良好的库;但是客户端需要从 64 位应用程序链接它。但是,更改指针的大小是一个问题,因为我们必须将它们存储在 32 位值中。
是否可以告诉编译器(Visual Studio 和 GCC)创建 64 位库,但在内部只使用 32 位地址空间?
【问题讨论】:
-
解释您曾经让 64 位应用程序在 Windows 中使用 32 位模块的神奇之处。应用程序及其加载的任何外部模块都是 64 位或全部 32 位。
-
你是什么意思“必须将它们存储在 32 位值中”。除非您使用 uint32 或数据类型来存储指针而不是指针类型,否则为 x64 架构编译库应该是一个问题。
-
另外,如果您使用
ULONG_PTR而不是已知的int类型来存储指针,您可以阻止这种情况(在 Windows 中)。那么这一切都是透明的。 -
@SergeyA 实际上有 x32 ABI,无论如何在 linux 上。可能也无济于事,但在 64 位模式下运行并不一定意味着您的指针必须是 64 位。
-
我的建议是更改适合指针大小类型的数据类型,将代码重新编译为 64 位,修复发现的任何错误。总比试图在 64 位类型中只使用 32 位来解决问题。
标签: c++ 32bit-64bit