64位linux不能运行32位程序,问题解决方案
2016-09-05 17:31
591 查看
问题由来
交叉编译是嵌入式开发非常重要的(应该说是必须的)一个环节,但是最近在实体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-Ubuntu SMP Thu Aug 11 18:01:55 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
解决方案
1、自己编译适合自己系统的交叉编译工具,觉得太麻烦,遂放弃。2、寻找64位的交叉编译工具,由于我的交叉编译工具是开发板厂商提供的,很多DEMO都是由它编译出来的,如果自己更换如果编译途中出现错误很难确定是交叉编译工具的问题还是代码的问题,风险较高,放弃。
3、重新安装32位的linux,由于笔者需要编译Android源码,编译过的都知道,硬盘空间至少40G,内存要16G+,而32位系统只能管理4G的内存空间,如果重新安装32位linux将会使本子的性能大打折扣,也放弃了。
4、最后一种方式就是在64位机器上安装32位程序运行库,由于64位CPU兼容32位指令集,因此此方式最为合适。
安装32位运行库
ubuntu(debain系列)的linux可以按照以下方式安装。(注意前边的命令提示符是’#’也就是说我是用root运行的,如果不愿意用root运行的话需要加 sudo)# dpkg –add-architecture i386
#apt install libc6:i386
测试
安装完成后,重新运行arm-linux-gcc -v那久违的大坨版本信息出现,OK,问题解决。
后记
这个问题经常遇到,又经常忘记,身边的朋友在我的怂恿之下把本子换成linux后也经常遇到此问题,所以就写成博客备忘,也和遇到同样问题的同道们分享。安装32位运行库的解决方案参考了http://www.voidcn.com/blog/zoomdy/article/p-6152388.html附上链接,表示感谢和敬意。
相关文章推荐
- 64位操作系统/64位IIS下解决32位DLL不能运行的问题(原创)
- gcc编译静态库到自己的程序 解决在不同linux下因libc版本问题而不能运行
- 关于Linux64位系统不能安装32位程序的解决方式
- (原)解决.NET 32位程序运行在64位操作系统下的兼容性问题
- 解决.NET 32位程序运行在64位操作系统下的兼容性问题
- 64位linux 系统运行32位程序解决方法
- Linux应用随笔(五)64位Debian8兼容运行32位adb开发android应用,并解决手机驱动问题
- 解决ubuntu 64位系统 无法运行32位程序的问题
- 用SD卡可以运行Linux系统,却不能安装Linux系统问题的解决方法之一
- 32位系统上开发的Access为数据库的程序在64位机器上运行出错的解决办法
- win7 64位平台编译的程序在XP 32位平台无法运行的解决方法
- Linux 32位向64位移植的一些问题及解决
- MFC窗体程序作为服务运行注销登录后不能关机的问题解决
- Linux 32位向64位移植的一些问题及解决
- 解决Tomcat不能在64位Windows上作为服务运行的问题
- 64位下无法运行32位程序的解决方法 提示未指定提供程序,也没有指派的默认提供程序
- 64位Linux不能正常使用32位程序的方法
- Win7如何提升为管理员权限,如何开机启动需要管理员权限的程序,解决win7开机不能自动运行的问题等
- Win7如何提升为管理员权限,如何开机启动需要管理员权限的程序,解决win7开机不能自动运行的问题等