如何在64位x86环境下编译32位x86应用程序

How to compile 32bit x86 application in 64bit x86 environment?

本文关键字:x86 编译 32位 应用程序 环境 64位      更新时间:2023-10-16

如何在64位x86环境下编译32位x86应用程序?

cc/ld/ar的任何命令,包括选项?谢谢。

任何链接都是非常赞赏的。谢谢。

要用64位多库GCC编译和链接C源文件,您可以执行以下操作:

gcc -m32 -c somefile.c
gcc -m32 somefile.o -o myprog

请注意,所有32位的库都需要安装并由多库编译器使用。

ar应该工作,如果构建正确,不鼓励直接调用ld,因为它的选项与GCC的完全不同。链接到GCC。


至于为什么"不鼓励直接调用ld":如果你把gcc链接起来,它将确切地知道系统/运行时库的位置,以及它需要传递给ld的任何平台特定选项。当直接调用ld时,您需要处理所有这些。在这里,32和64位的选项很重要,以及适当的库目录。

是的,只要使用-m32并确保安装了所有32位工具和库(不是所有的x86-64发行版默认包含这些,所以你可能需要apt-getyast或其他来安装这些)。

$ gcc -m32 -Wall foo.c -o foo

是的,我需要-D_FILE_OFFSET_BITS=64有时-m32有时会产生一些麻烦,所以你必须自己尝试。

c++ -m32 -D_FILE_OFFSET_BITS=64 foo.c -o foo

但这是反过来的。在32位机上编译64位程序

-m32标志是你所需要的,即

gcc -m32 ...

如果您得到一个错误,您可能需要32位库,可能命名类似于glibc-devel.i686。这是Fedora上的包名(使用yum),其他Linux发行版应该类似。

在Debian &Ubuntu,你需要gcc-multilibia32-libs-dev软件包