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

时间:2011-12-05 10:49:22

标签: c++ c linux

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

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

非常感谢任何链接。感谢。

注意:以c代码为例。

4 个答案:

答案 0 :(得分:3)

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

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

请注意,multilib编译器需要安装和使用所有32位库。

ar应该有效,如果构建正确,则不鼓励直接调用ld,因为它的选项与GCC完全不同。只需与GCC联系。


至于为什么“不鼓励直接调用ld”:如果你们都要gcc进行链接,它将确切地知道系统/运行时库的位置,以及任何特定于平台的信息。需要传递给ld的选项。直接致电ld时,您需要处理所有这些问题。这对于32位与64位的选项以及正确的库目录很重要。

答案 1 :(得分:1)

是的,只需使用-m32并确保安装了所有32位工具和库(默认情况下并非所有x86-64发行版都包含这些工具和库,因此您可能需要apt-get或{ {1}}或安装这些的任何东西。)

yast

答案 2 :(得分:1)

-m32标志就是您所需要的,即

gcc -m32 ...

如果出现错误,则可能需要32位库,其名称可能类似于glibc-devel.i686。这是Fedora上的软件包名称(使用yum),其他Linux发行版应该是类似的。

关于Debian& Ubuntu,您需要gcc-multilibia32-libs-dev个包。

答案 3 :(得分:1)

是的,我需要-D_FILE_OFFSET_BITS = 64有时-m32有时会遇到麻烦所以你必须自己试试。

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

但那是相反的。在32位盒子上编译64位程序。