关闭

吐血简述在arm-linux上编译helloworld时候的抓狂经历

1292人阅读 评论(0) 收藏 举报
分类:

转自:http://blog.csdn.net/samantha_sun/article/details/6428285

想在我的fl2440上运行一个helloworld,在三、五个月前,我曾经编写过一个helloworld,跑在开发板上,当时编译和运行都很顺利,所以就没有把相关的操作过程记录下来。在随后的几个月里,一直在研究linux底层驱动的开发,所以一直都没有开发过上层应用程序。现在,由于想编写一个上层应用来测试一下底层驱动程序的时候,又想再编译一下helloworld,因此,也就开始了我无比挫折的开发helloworld程序的曲折历程,过程无比抓狂和令人吐血,从没想过helloworld会如此困难,因此记录下来,以便网友和我自己参考。

 

1,编写helloworld.c,内容包含了stdio.h头文件,并在main函数中只调用printf函数输出helloworld,如此简单,和普通helloworld没有区别。arm-linux-gcc helloworld.c -o helloworld,编译顺利完成,生成helloworld.

2,将helloworld拷贝到开发板中,直接运行:./helloworld,输出错误:permission denied. 然后调用chmod +x helloworld, ./helloworld, 然后输出错误信息“-sh ./helloworld: not found”。噩梦从此开始。

3,我认为这个not found的错误应该是开发板内缺少某些库的原因,因此赶紧去找库。查到arm-linux-elfread -a helloworld | "shared library" 可以看到程序依赖哪些库,结果查出依赖“libc.so.6”

4,libc.so.6是libc-2.8.so的链接,因此,我拷贝libc-2.8.so到开发板中,然后在开发板中手动用“ln -s libc-2.8.so libc.so.6”为库建立了链接,然后,运行./helloworld,结果发现出错信息还是“not found”。因此我再想是不是还缺少别的库。

5,进入ubuntu调用"arm-linux-elfread -a helloworld"这回输出内容比较多,然后找来找去,好像里面说到一个"ld-linux-2.8.so.3",于是在开发板的/lib文件夹下ld-linux-2.8.so.2,改成了ld-linux-2.8.so.3。./helloworld,这回终于不说“not found”了,但是出错信息又成了“error when use library libc.so.6, can't handle TLS data”。

6,我觉得吧,以前调试helloworld真没这么麻烦,但是没办法,还要继续,我已经抓狂状态了。没办法还是老老实实地把ubuntu上交叉编译器当中的ld-2.8.so考到开发板中了,刚才没考,然后自己创建链接,然后./helloworld,这回又出现了新的错误“segmentation fault”.然后我就又开始在网络上搜这个问题的解决办法。基本上毫无头绪。

7,我回忆以前helloworld成功的时候,还没有自己修改和编译内核,而且我的内核是使用arm-linux-gcc 4.3.2编译的,但是原厂开发板应该是3.4.1编译的,而且我的文件系统也使用的是原厂提供的文件系统,我猜会不会是内核和文件系统编译版本不同造成的?所以,重新烧写了原厂内核,然后再进入文件系统,运行./helloworld,但是仍然报错,然后抓狂,然后一口黑血吐在屏幕上。

8,回到ubuntu,修改环境变量,把arm-linux-gcc 4.3.2换成 3.4.1,重新编译helloworld,然后考到开发板中,然后把我之前考到/lib目录下的所有库和相应链接都删掉,保留以前系统自带的库,然后./helloworld,结果终于显示出了挨千刀的 hello world!

 

9,重新烧写我自己用arm-linux-gcc 4.3.2编译的内核,然后运行helloworld,这回仍然正常,这就证明helloworld的正常运行和文件系统的编译方式紧密相关(文件系统是arm-linux-gcc3.4.1编译的),而和内核的编译器版本关系不大,起码事实证明了这点。


0
0
查看评论

arm系统启动后运行 helloworld ("hello world" 被封装为ramdisk)

---------------------------------------- arm系统启动后运行 helloworld ---------------------------------------- 编译环境:arm交叉环境: 1. 交叉编译linux 内核。 注意make 时, ARCH...
  • hejinjing_tom_com
  • hejinjing_tom_com
  • 2015-07-07 16:51
  • 950

linux 交叉编译的HelloWorld【1】

日期:2016-04-02        起因刚好最近三天假期可以玩玩Linux。就是将一个fedora下文件发送到Arm9的下的系统下进行运行。也许会问为何不直接用Arm9上的系统来编译呢,实际上板子的资源本身就有限,用它来执行结果就好了,当然可以...
  • zhjmyx
  • zhjmyx
  • 2016-04-02 20:27
  • 3055

GNU ARM汇编--(二)汇编编译链接与运行

GNU的汇编器是GNU Tools的一部分,可以用来ARM的汇编语言源代码编译为二进制文件.关于GNU汇编器的介绍可以搜索《GNU Assembler Manual》.这里我们只是做一个简短的介绍,对GNU汇编器有一个大概的认识,同时通过两个例子了解一下GNU ARM汇编.   ...
  • dndxhej
  • dndxhej
  • 2012-04-26 22:28
  • 13977

ARM-LINUX调试中segmentation fault 的解决参考

可恶的segmentation fault问题解决探索(转载) http://oss.lzu.edu.cn/blog/article.php?tid_700.html 背景     最近一段时间在linux下用C做一些学习和开发,但是由于经验不足,...
  • mawentao0530
  • mawentao0530
  • 2011-10-19 14:23
  • 2132

Segmentation Fault in Linux 原因与避免

1.什么是“Segmentation fault in Linux”?     我们引用wiki上的一段话来回答这个问题。 A segmentation fault (often shortened to SIGSEGV) i...
  • tiankongtiankong01
  • tiankongtiankong01
  • 2016-12-25 14:42
  • 290

Linux Segmentation Fault 段错误 产生原因调试方法

转载至:http://www.cnblogs.com/panfeng412/archive/2011/11/06/segmentation-fault-in-linux.html http://blog.sina.com.cn/s/blog_69cc2f0b0100qglr.html ...
  • qr8345776
  • qr8345776
  • 2016-04-15 12:20
  • 1176

如何将arm-linux-gcc编译的动态链接helloworld在Android上运行

如何将arm-linux-gcc编译的动态链接helloworld在Android上运行标题起得有点长,但是少一个字都不足以描述清楚我要说的。Android上要用C程序无非两种方法:1. NDK JNI 2. 使用arm-linux-gcc编译的静态链接程序;这两种方法我使用了多年,比较方便。不过也...
  • kangear
  • kangear
  • 2017-11-15 10:08
  • 377

Linux 编译内核全记录

Linux内核编译
  • qq_34911465
  • qq_34911465
  • 2017-03-24 12:18
  • 607

Linux遭遇Segmentation fault

原文地址::http://www.cppblog.com/sleepwom/archive/2012/01/13/164091.html Program terminated with signal 11, Segmentation fault. 程序运行了8个小时之后,出现了上面的提示...
  • xqhrs232
  • xqhrs232
  • 2016-10-20 18:15
  • 1167

linux编程中遇到的Segmentation fault错误

昨天编程的时候,遇到了Segmentation fault错误。使用GDB调试时才发现的,顺便说下。习惯了图形界面式的调试工具,用命令行确实还是不习惯。关于此错误问了下谷歌,一搜一大篇,看来是一个很常见的问题。 简单来讲,这个错误就是因为非法访问了系统中的内存而导致的错误,比如一些系统中关...
  • abclixu123
  • abclixu123
  • 2012-12-05 12:28
  • 924
    个人资料
    • 访问:554772次
    • 积分:7262
    • 等级:
    • 排名:第3671名
    • 原创:75篇
    • 转载:538篇
    • 译文:1篇
    • 评论:91条
    最新评论