Chinaunix首页 | 论坛 | 博客
  • 博客访问: 852068
  • 博文数量: 90
  • 博客积分: 766
  • 博客等级: 军士长
  • 技术积分: 1867
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-18 08:42
个人简介

linux

文章分类

全部博文(90)

文章存档

2021年(2)

2020年(2)

2017年(1)

2015年(11)

2014年(1)

2013年(53)

2012年(16)

2011年(4)

分类: C/C++

2013-01-24 17:12:54

        有很多时候在交叉编译的时候,会出现"-bash:./a.out:not found",非常郁闷,明明a.out在这里,且权限是够了的,为什么还打印这个东西拉,网上的答案也很少。这个问题的原因在于编译器,程序要运行,最终是通过/lib/ldxxx这个加载器将程序放到内存当中去的,问题就处在这里,如果目标机的加载器和编译的加载器不同的话,就会导致这个问题,看下面:


宿主机上:

$armv5l-none-linux-uclibceabi-gcc test.c

目标机上:

$tftp -r a.out -g 192.168.55.12

$chmod +x a.out

$./a.out


目标机终端打印:

-bash: ./a.out: not found


        上面是问题的表像,通过readelf -d a.out可以发现a.out 的加载器是ld-uClibc.so,而在目标机上/的lib/ldxxx是ld-linux.so,所以想要解决这个问题,需要将编译工具和目标机同步。

宿主机:

$arm-linux-gcc test.c


目标机:

$tftp -r a.out -g 192.168.55.12

$chmod +x a.out

$./a.out

        最后执行成功。

阅读(2550) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~