gcc 不会与 -m32 链接

Vla*_*eev 25 gcc multiarch 14.04

尝试在 64 位系统上编译即使是最简单的 ( int main(){}) 程序也会-m32失败:

$ gcc -m32 test.c
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc.a when searching for -lgcc
/usr/bin/ld: cannot find -lgcc
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.8/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)

-m32指定时似乎仍然在错误的目录中错误地搜索。

libgcc-4.8-dev:i386已安装,并且我已验证 32 位库位于/usr/lib/gcc/i686-linux-gnu/4.8/.

我试过设置和导出LD_INCLUDE_PATHLD_LIBRARY_PATH但无济于事。

Ell*_*sch 26

首先,您需要安装“gcc-multilib”和“g++-multilib”

sudo apt-get install gcc-multilib g++-multilib
Run Code Online (Sandbox Code Playgroud)

然后您当前的命令将起作用,

$ cat hello.c
#include <stdio.h>

int main(int argc, char *argv[]) {
    puts("Hello, World!");
}
$ uname -a
Linux vbox-1404 3.13.0-24-generic #46-Ubuntu SMP Thu Apr 10 19:11:08 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
$ gcc -m32 hello.c
$ ./a.out
Hello, World!
$ file a.out
a.out: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.24, BuildID[sha1]=80bdc95e2941e3ba8d7bb7c1682098f20e77cebc, not stripped
Run Code Online (Sandbox Code Playgroud)

  • 注意:对于 C++ 程序,还需要 `g++-multilib`。 (2认同)