Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将C代码编译为32位代码并在64位应用程序中运行?我可以使用什么工具链?_C_Linux_Windows_X86_X86 64 - Fatal编程技术网

如何将C代码编译为32位代码并在64位应用程序中运行?我可以使用什么工具链?

如何将C代码编译为32位代码并在64位应用程序中运行?我可以使用什么工具链?,c,linux,windows,x86,x86-64,C,Linux,Windows,X86,X86 64,我想像编译32位应用程序一样编译C代码(所以sizeof(void*)应该是4),但在64位应用程序中运行它 我可以保证这段代码不会收到指向>4GB地址空间等的指针 我只需要一个工具链就可以了 如何将C代码编译为32位代码并在64位应用程序中运行 在Windows和Linux上,您不能在64位进程中执行32位代码。反之亦然 如何将C代码编译为32位代码并在64位应用程序中运行 在Windows和Linux上,您不能在64位进程中执行32位代码。反之亦然。Linux有一个可用的版本,它是带有32位

我想像编译32位应用程序一样编译C代码(所以sizeof(void*)应该是4),但在64位应用程序中运行它

我可以保证这段代码不会收到指向>4GB地址空间等的指针

我只需要一个工具链就可以了

如何将C代码编译为32位代码并在64位应用程序中运行

在Windows和Linux上,您不能在64位进程中执行32位代码。反之亦然

如何将C代码编译为32位代码并在64位应用程序中运行

在Windows和Linux上,您不能在64位进程中执行32位代码。反之亦然。

Linux有一个可用的版本,它是带有32位指针的64位代码。这似乎更适合“请不要破坏在
unsigned int
中存储指针的代码!”用法。但是整个应用程序都应该使用这个目标来构建

但是,在同一进程中组合x32和x86_64代码要比x86和x86_64容易得多,因为它不需要CPU切换模式。

Linux有一个可用的版本,它是带有32位指针的64位代码。这似乎更适合“请不要破坏在
unsigned int
中存储指针的代码!”用法。但是整个应用程序都应该使用这个目标来构建



但是,在同一进程中组合x32和x86_64代码比在x86和x86_64中要容易得多,因为它不需要CPU切换模式。

我不是在寻找“有效”的方法来实现这一点。操作系统禁止这样做,因为32位代码将无法使用64位指针。但我想以某种方式破解它。我的C代码将无法访问OS api等。OS禁止这样做,因为32位代码将无法使用64位指针。这只是众多理由中的一个。无论如何,我说的是准确的。重点是我不需要操作系统支持,我只想生成32位代码并在64位应用程序中运行。写我自己的编译器来做这件事是个坏主意,所以我在寻找替代方案。我在问是否有工具链来做这件事……我想我会纠正这个问题。虽然在64位模式下工作,并启动64位应用程序,CPU可以在这里执行32位指令,但我并不是在寻找“有效”的方法。操作系统禁止这样做,因为32位代码将无法使用64位指针。但我想以某种方式破解它。我的C代码将无法访问OS api等。OS禁止这样做,因为32位代码将无法使用64位指针。这只是众多理由中的一个。无论如何,我说的是准确的。重点是我不需要操作系统支持,我只想生成32位代码并在64位应用程序中运行。写我自己的编译器来做这件事是一个坏主意,所以我在寻找替代方案。我在问是否有工具链来做这件事…我想我会纠正这个问题。虽然在64位模式下工作并启动64位应用程序,CPU可以在这里执行32位指令。好吧,如果我理解正确,在64位模式下也可以,但程序应该(尽可能多地)假装不是吗?所以基本上,不使用64位寄存器(除了在进行外部调用时)。这是更可能的,尽管我不知道有任何编译器会真正做到这一点。是的。我需要生成forbit以使用64位寄存器,并且整个代码的行为应该像32位C代码一样(sizeof运算符应返回与32位平台相同的值)如果您告诉我们您真正想要解决的问题,那么回答这个问题可能会更容易。尝试在x86-64上运行为32位ARM微控制器编写的C代码如果您不打算访问外部OS LIB等,您可以使用GCC和-m32标志。好的,如果我理解正确,就可以了如果您处于64位模式,但程序应该(尽可能)假装不是这样?因此,基本上不使用64位寄存器(进行外部调用时除外)。这可能要大得多,尽管我不知道有哪个编译器会真正做到。是的。我需要使用64位寄存器生成forbit,整个代码的行为应该像32位C代码一样(sizeof运算符应该返回与32位平台相同的值)如果您告诉我们您真正想要解决的问题,也许回答这个问题会更容易。尝试在x86-64上运行为32位ARM微控制器编写的C代码如果您不打算访问外部OS LIB等,您可能会将GCC与-m32标志一起使用。实际上,我看到的是混合名称,是x64_32吗或者x86_32?无论如何,它似乎不是很流行。也不是。它只是“x32”。x32存在的一个主要原因是减少了大量指针密集型数据结构代码的缓存占用/内存带宽消耗,同时从长模式(包括SSE2作为基线)获得了加速和更好的ABI。(
long
也是32位的,但是当然
int64_t
仍然是高效的,原子的,因为它在64位寄存器的长模式下运行。)有趣的一点是,它可能对不太可移植的代码有用。实际上我看到了混合名称,是x64_32还是x86_32?无论如何,它似乎没有很好地流行起来。两者都不是。它只是简单的“x32”。x32存在的一个主要原因是减少了大量指针密集型数据结构代码的缓存占用/内存带宽消耗,同时从长模式(包括SSE2作为基线)和更好的ABI中获得加速。(
long
也是32位的,但是当然
int64_t
仍然是高效的,原子的,因为它在64位寄存器的长模式下运行。)有趣的一点是,它可能对不太可移植的代码有用。