Ubuntu 16.04 64 位下编译 32 位程序

Ubuntu 16.04 64 位下编译 32 位程序

问题产生

博主最近需要在 Ubuntu 16.04 64 位环境下编译用于目标机的 32 位程序,可是直接在使用 gcc 编译时遇到了问题:

gcc hello.c -m32

错误提示:

/usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-linux-gnu/5/libgcc.a 时跳过不兼容的 -lgcc
/usr/bin/ld: 找不到 -lgcc
/usr/bin/ld: 当搜索用于 /usr/lib/gcc/x86_64-linux-gnu/5/libgcc_s.so 时跳过不兼容的 -lgcc_s
/usr/bin/ld: 找不到 -lgcc_s

根据网上方法,已经安装了:

sudo apt-get install lib32ncurses5 ​lib32z1

但是仍然出现上述问题。由于新版 Ubuntu 16.04 不支持安装 ia32-libs,因此就想能否有其他办法解决。

解决思路

看到报错提示时我就觉得奇怪,既然已经指明了 -m32 选项,为何 gcc 还会去 /usr/lib/gcc/x86_64-linux-gnu/ 这个路径下去找库呢,于是怀着好奇去查了一下……果然博主的系统里面根本就没有 32 位的库文件,静态库和动态库都没有……于是就知道肯定是缺少依赖造成的……

解决方法

经检查,是博主刚装的新双系统的 Ubuntu 16.04 还缺少几个依赖:

sudo apt-get install build-essential module-assistant gcc-multilib g++-multilib  

安装完成后,再次用 32 位模式编译,果然编译成功:

$ ls 
hello.c  Makefile
$ make 
gcc hello.c -m32
$ ls 
a.out  hello.c  Makefile
$ file a.out 
a.out: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=6660bedaa65f938439ff9c46489eff2860fe8cf6, not stripped
$ ./a.out 
hello

个人主页
2019.1.3

  • 5
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值