gpt4 book ai didi

c - 在 Windows 中使用 GCC 或 Clang 强制 LP64 数据模型

转载 作者:行者123 更新时间:2023-12-03 14:43:55 25 4
gpt4 key购买 nike

有没有办法在面向 Windows 时强制 GCC 和/或 Clang 编译器使用 LP64 数据模型(忽略 Windows 使用 LLP64 数据模型)?

最佳答案

否,因为请求的功能不起作用
您正在“针对 Windows”,这大概意味着您希望编译器生成以通常方式在 Windows 下运行的代码。为此,程序必须调用 Windows API 中的函数。有效地有three versions of the Windows API :win16、win32 和 win64。由于您需要 64 位指针(“LP64”中的“P64”),因此唯一可能的目标是 win64。
为了调用一个 win64 函数,你必须包含 windows.h .该头文件使用 long .如果有一个编译器开关来坚持 long被视为 64 位整数 (LP64) 而不是 32 位 (LLP64),那么编译器对如何调用函数和布局使用 long 的数据结构的理解会错;生成的程序将无法正确运行。
同样的问题也适用于标准 C 和 C++ 库。如果您链接到现有的已编译库(这是典型的),则对它的调用将不起作用(因为它将使用 LLP64)。如果您使用假设的开关从源代码构建一个强制 LP64,它对 Windows API 的调用将失败。
但是你可以试试 Cygwin
Cygwin使用 LP64 并生成在 Windows 上运行的二进制文件。这是可能的,尽管我上面写了,因为 Cygwin DLL 充当 Cygwin LP64 环境和 native win64 LLP64 环境之间的桥梁。假设您有最初为 win32 编写的代码,而您现在想利用 64 位地址空间而无需更改或进行最少的代码更改,我怀疑这是最简单的方法。但我应该承认,我从未以这种方式使用过 Cygwin,因此可能存在我不知道的问题。

关于c - 在 Windows 中使用 GCC 或 Clang 强制 LP64 数据模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49311731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com