64位Linux不能运行32位程序的问题解决方案

问题由来

交叉编译是嵌入式开发非常重要的(应该说是必须的)一个环节,但是最近在实体Linux机器上使用交叉编译工具却经常遇到一个问题:交叉编译工具版本正确,安装步骤正确,环境变量设置也正确,但是在运行arm-linu-gcc -v时却一直报bash: /opt/arm-2009q3/bin/arm-linux-gcc: 没有那个文件或目录的错误,很是郁闷,一番google终于发现了问题原因:我的Linux是64位的,但是交叉编译工具是32位的,因此不能运行。
用file命令查看arm-none-linux-gnueabi-gcc 会出现如下信息。

arm-none-linux-gnueabi-gcc: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, stripped

而我的操作系统 uname -a

Linux kevin-TP 4.4.0-36-generic #55- SMP Thu Aug 11 18:01:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

解决方案

安装32位运行库

ubuntu(debain系列)的linux可以按照以下方式安装。(注意前边的命令提示符是’#’也就是说我是用root运行的,如果不愿意用root运行的话需要加 sudo)
# dpkg –add-architecture i386
#apt install libc6:i386

测试

安装完成后,重新运行arm-linux-gcc -v
那久违的大坨版本信息出现,OK,问题解决。

后记

这个问题经常遇到,又经常忘记,身边的朋友在我的怂恿之下把本子换成linux后也经常遇到此问题,所以就写成博客备忘,也和遇到同样问题的同道们分享。

猜你喜欢

转载自www.linuxidc.com/Linux/2016-11/137065.htm