📄 00000003.htm
字号:
<?xml version="1.0" encoding="gb2312"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"/><title>讨论讨论free的交叉编译器的问题吧! turbolinux </title></head><body><center><h1>BBS 水木清华站∶精华区</h1></center><a name="top"></a>发信人: specialpig (草草◎走过去◎走过来), 信区: Embedded <br />标 题: 讨论讨论free的交叉编译器的问题吧! <br />发信站: BBS 水木清华站 (Sat Jan 19 21:45:57 2002) <br /> <br />发在这个应该没有错吧?呵呵 <br /> <br />各位大侠好!我以前没有学过多少编译的知识,最近对嵌入式感兴趣,苦于组里 <br />没有买过编译器,于是开始尝试free的交叉编译器,由于基础太差,干起来感觉 <br />非常吃力,水木上看了好久,也几乎没有这方面的文章。我想把我做过的都写出 <br />来,遇到的问题很多,请各位大侠指点,我愿意花时间在这方面做尝试,但请各 <br />位给详细的指些路子出来!谢谢! <br /> <br />做free的东西,当然是gcc,开发板是一块68332的板子 <br /> <br />(一)我首先上网搜来了ashware公司做的交叉编译的gcc——GccAshware.exe, <br />是个压缩包,打开以后,把系统的环境PATH设置一下就行了(该公司网站的解释) <br />98和2000下都可以用,是在windows下模拟linux的部分环境,可以在command中 <br />使用ls等命令,make文件和ld文件都要自己写。 <br /> 我自己写了一个Hello World的C,试图用它编译,make文件如下: <br />—————————————————————————————————— <br />CC = m68k-coff-gcc <br />CXX = m68k-coff-g++ <br />LINKER_SCRIPT=bcc.ld <br />CFLAGS = -m68000 -O4 -fomit-frame-pointer <br />LDFLAGS = -m68000 -Wl,-s -Wl,-n -T$(LINKER_SCRIPT) -Wl,-Map=$(basename $<a href="mailto:@).m">@).m</a> <br />ap <br />all: hello.x <br />hello.o: hello.c <br /> $(CC) $(CFLAGS) -Wall -ansi $< -c -o $@ <br />hello.x: hello.o <br /> $(CC) $(LDFLAGS) -o $@ $< <br />——————————————————————————————————— <br />其中这个bcc.ld文件是,lib里面自己带的,文件头如下: <br />/*STARTUP(crt0.o)*/ <br />OUTPUT_ARCH(m68k) <br />/* Uncomment this if you want srecords. This is needed for a.out <br /> * if you plan to use GDB.*/ <br />OUTPUT_FORMAT(srec) <br />SEARCH_DIR(.) <br />GROUP(-lbcc -lc -lgcc) <br />__DYNAMIC = 1; <br /> <br />下面就是板子上的ram等的地址设置,其中第一句话本来没有注释掉,但每次编译的 <br />时候都报这个错: <br /> <br />\gcc-m68k-ashware\m68k-coff\lib\m68000\crt0.o:/source/egcs-1.1.2/libgloss/m6 <br />8k/c <br />rt0.S:16: multiple definition of `start' <br />crt0.o:/source/egcs-1.1.2/libgloss/m68k/crt0.S:16: first defined here <br />collect2: ld returned 1 exit status <br />MAKE.EXE: *** [hello.x] Error 1 <br /> <br />后来我把第一句话注释掉后编译通过,下载到开发板上可以运行,但是执行文件 <br />非常大,71K,光下载就搞了半天。再怎样把编译结果变小,我就没办法了, <br /> <br />1)为什么链接结果这么大?这是不是和动态链接和静态链接什么的有关系? <br />2)我想能不能把lib库精简一下来精简程序,可是,我可以把libc.a解开包, <br /> 但是我不知道如何按照自己的需要进行打包,另外,我的这个想法可行么? <br /> 请大侠指点,如何能把编译结果变小?在链接库上做文章对不对? <br />3)我可以把.o文件用objdump转化成汇编,可是这样做的汇编程序无法再编成.o文件 <br /> 有什么好方法么? <br />(crt0.o后来经询问邵老师知道,是开发板的初始和程序退出代码,因为我的板上有监 <br />控程序,所以可以正常运行) <br /> <br />(二)使用cygwin,也是网上的,由于我发现其文档和例子的pdf和前面那个几乎一样 <br />就没有在上面花多少功夫 <br /> <br />(三)uClinux的交叉编译器,关于uClinux本身,我就是一头雾水。 <br />经人指点,从uClinux.org找来uClinux的m68k-elf-gcc二进制代码压缩包,在Redhat7.2下 <br />解压缩,然后设置好PATH,重新login,m68k-elf-gcc可以执行,编译没有任何函数的文 <br />件可以完成(只有一个加法运算,可是也有19k大了),后尝试在程序中使用printf、 <br />getc、putc、puts等函数,编译失败。编译过程如下: <br />———————— <br />[root@localhost autobeef]# m68k-elf-gcc -lc -lio test.c -o test.s <br />/tmp/ccvVJk54.o: In function `main': <br />/tmp/ccvVJk54.o(.text+0x12): undefined reference to `puts' <br />collect2: ld returned 1 exit status <br />—————————————— <br />没有ld文件是不完整,可是-lc有效果,为什么-lio就没有用呢?(我找过了, <br />lib里面有libio.a库包)后来我用objcopy看了一下,libc.a里面就有putc.o等库文件 <br />我该怎么处理才能搞定这个问题呢?另外如果就这么做下来,看样子执行文件也小不了, <br />我应该再怎么弄一下呢? <br /> <br />Redhat7.2是版本高了点,可是我是直接当来的二进制代码,又不用编译, <br />应该不是系统和原来gcc版本的问题吧? <br /> <br />以上问题见笑了,可是写了好半天,请各位大侠帮我想想办法,谢谢各位了! <br /> <br />-- <br /> ((`'-"``""-'`)) <br /> ) - - ( <br /> / (o _ o) \ <br /> \ ( 0 ) / <br /> _'-.._'='_..-'_ <br /> /`;#'#'#.-.#'#'#;`\ <br /> <br /> <br />※ 来源:·BBS 水木清华站 smth.org·[FROM: 166.111.51.16] <br />发信人: c1 (牛皮), 信区: Embedded <br />标 题: Re: 讨论讨论free的交叉编译器的问题吧! <br />发信站: BBS 水木清华站 (Mon Jan 21 09:28:17 2002) <br /> <br />看来我们的兴趣是一样的,我也曾今问过许多人但都是不太清楚。 <br />我自己使用的是SINGLE STEP的编译连接调试器,做了一些有关68332 <br />的开发,我一直想找免费的编译连接调试器,也试着使用过GCC,GDB <br />(在CYGWIN上),不过最终没有成功,很抱歉发表此文不能帮你解决 <br />问题,但是我真的很希望大家多关注一下这方面的技术,有免费的 <br />而且性能也很不错,我们为什么不用?为什么要将白花花的银子给老外? <br />如果有人是这方面的专家也请大家互相帮助,我先谢了。 <br /> <br />【 在 specialpig (草草◎走过去◎走过来) 的大作中提到: 】 <br />∶<i> 发在这个应该没有错吧?呵呵 </i><br />∶<i> 各位大侠好!我以前没有学过多少编译的知识,最近对嵌入式感兴趣,苦于组里 </i><br />∶<i> 没有买过编译器,于是开始尝试free的交叉编译器,由于基础太差,干起来感觉 </i><br />∶<i> 非常吃力,水木上看了好久,也几乎没有这方面的文章。我想把我做过的都写出 </i><br />∶<i> 来,遇到的问题很多,请各位大侠指点,我愿意花时间在这方面做尝试,但请各 </i><br />∶<i> 位给详细的指些路子出来!谢谢! </i><br />∶<i> 做free的东西,当然是gcc,开发板是一块68332的板子 </i><br />∶<i> (一)我首先上网搜来了ashware公司做的交叉编译的gcc——GccAshware.exe, </i><br />∶<i> 是个压缩包,打开以后,把系统的环境PATH设置一下就行了(该公司网站的解释) </i><br />∶<i> 98和2000下都可以用,是在windows下模拟linux的部分环境,可以在command中 </i><br />∶<i> 使用ls等命令,make文件和ld文件都要自己写。 </i><br />∶<i> ................... </i><br /> <br />-- <br /> <br />※ 来源:·BBS 水木清华站 smth.org·[FROM: 211.71.69.23] <br />发信人: specialpig (草草◎走过去◎走过来), 信区: Embedded <br />标 题: Re: 讨论讨论free的交叉编译器的问题吧! <br />发信站: BBS 水木清华站 (Mon Jan 21 11:02:42 2002) <br /> <br />我把文章转到饮水思源上去试一试! <br />【 在 c1 (牛皮) 的大作中提到: 】 <br />∶<i> 看来我们的兴趣是一样的,我也曾今问过许多人但都是不太清楚。 </i><br />∶<i> 我自己使用的是SINGLE STEP的编译连接调试器,做了一些有关68332 </i><br />∶<i> 的开发,我一直想找免费的编译连接调试器,也试着使用过GCC,GDB </i><br />∶<i> (在CYGWIN上),不过最终没有成功,很抱歉发表此文不能帮你解决 </i><br />∶<i> 问题,但是我真的很希望大家多关注一下这方面的技术,有免费的 </i><br />∶<i> 而且性能也很不错,我们为什么不用?为什么要将白花花的银子给老外? </i><br />∶<i> 如果有人是这方面的专家也请大家互相帮助,我先谢了。 </i><br /> <br />
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -