在64位Linux上编译32位应用程序

时间:2015-06-30 14:58:29

标签: c linux 32-bit

我正在尝试在64位Kali Linux操作系统上编译32位程序。

这是我的系统信息:

root@kali:~/Desktop# cat /proc/version
Linux version 3.18.0-kali3-amd64 (debian-kernel@lists.debian.org) (gcc version 4.7.2 (Debian 4.7.2-5) ) #1 SMP Debian 3.18.6-1~kali2 (2015-03-02)

当我尝试编译我的C项目时,找不到-lgcc

root@kali:~/Desktop/Project# make
cc -o libor libor.c -fno-stack-protector -z execstack -m32 -lpthread
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.7/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.7/libgcc_s.so when searching for -lgcc_s
/usr/bin/ld: cannot find -lgcc_s
collect2: error: ld returned 1 exit status
make: *** [all] Error 1

请注意,我正在使用-m32标志强制编译32位。

与其他地方建议的一样,应该使用以下命令安装32位库:

sudo apt-get install libc6-dev-i386

然而,这仅将错误消息更改为上面所示的错误消息。我失去了前一个,但我想它不再重要。

请注意,现有答案对我没有帮助,所以这不重复。

2 个答案:

答案 0 :(得分:1)

尝试确保新的32位库位于库搜索路径中。您可以使用ldconfig命令对此进行验证,如果未列出库的目录,请使用此网页中的提示:http://www.cyberciti.biz/faq/linux-setting-changing-library-path/

我不知道以上是你问题的原因,但值得一试?

答案 1 :(得分:-1)

apt-get install gcc-multilib

应该这样做。