?? 00000000.htm
字號(hào):
<?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的交叉編譯器的問(wèn)題吧! turbolinux </title></head><body><center><h1>BBS 水木清華站∶精華區(qū)</h1></center><a name="top"></a>發(fā)信人: specialpig (草草◎走過(guò)去◎走過(guò)來(lái)), 信區(qū): Embedded <br />標(biāo) 題: 討論討論free的交叉編譯器的問(wèn)題吧! <br />發(fā)信站: BBS 水木清華站 (Sat Jan 19 21:45:57 2002) <br /> <br />發(fā)在這個(gè)應(yīng)該沒(méi)有錯(cuò)吧?呵呵 <br /> <br />各位大俠好!我以前沒(méi)有學(xué)過(guò)多少編譯的知識(shí),最近對(duì)嵌入式感興趣,苦于組里 <br />沒(méi)有買過(guò)編譯器,于是開(kāi)始嘗試free的交叉編譯器,由于基礎(chǔ)太差,干起來(lái)感覺(jué) <br />非常吃力,水木上看了好久,也幾乎沒(méi)有這方面的文章。我想把我做過(guò)的都寫(xiě)出 <br />來(lái),遇到的問(wèn)題很多,請(qǐng)各位大俠指點(diǎn),我愿意花時(shí)間在這方面做嘗試,但請(qǐng)各 <br />位給詳細(xì)的指些路子出來(lái)!謝謝! <br /> <br />做free的東西,當(dāng)然是gcc,開(kāi)發(fā)板是一塊68332的板子 <br /> <br />(一)我首先上網(wǎng)搜來(lái)了ashware公司做的交叉編譯的gcc——GccAshware.exe, <br />是個(gè)壓縮包,打開(kāi)以后,把系統(tǒng)的環(huán)境PATH設(shè)置一下就行了(該公司網(wǎng)站的解釋) <br />98和2000下都可以用,是在windows下模擬linux的部分環(huán)境,可以在command中 <br />使用ls等命令,make文件和ld文件都要自己寫(xiě)。 <br /> 我自己寫(xiě)了一個(gè)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 />其中這個(gè)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等的地址設(shè)置,其中第一句話本來(lái)沒(méi)有注釋掉,但每次編譯的 <br />時(shí)候都報(bào)這個(gè)錯(cuò): <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 />后來(lái)我把第一句話注釋掉后編譯通過(guò),下載到開(kāi)發(fā)板上可以運(yùn)行,但是執(zhí)行文件 <br />非常大,71K,光下載就搞了半天。再怎樣把編譯結(jié)果變小,我就沒(méi)辦法了, <br /> <br />1)為什么鏈接結(jié)果這么大?這是不是和動(dòng)態(tài)鏈接和靜態(tài)鏈接什么的有關(guān)系? <br />2)我想能不能把lib庫(kù)精簡(jiǎn)一下來(lái)精簡(jiǎn)程序,可是,我可以把libc.a解開(kāi)包, <br /> 但是我不知道如何按照自己的需要進(jìn)行打包,另外,我的這個(gè)想法可行么? <br /> 請(qǐng)大俠指點(diǎn),如何能把編譯結(jié)果變???在鏈接庫(kù)上做文章對(duì)不對(duì)? <br />3)我可以把.o文件用objdump轉(zhuǎn)化成匯編,可是這樣做的匯編程序無(wú)法再編成.o文件 <br /> 有什么好方法么? <br />(crt0.o后來(lái)經(jīng)詢問(wèn)邵老師知道,是開(kāi)發(fā)板的初始和程序退出代碼,因?yàn)槲业陌迳嫌斜O(jiān) <br />控程序,所以可以正常運(yùn)行) <br /> <br />(二)使用cygwin,也是網(wǎng)上的,由于我發(fā)現(xiàn)其文檔和例子的pdf和前面那個(gè)幾乎一樣 <br />就沒(méi)有在上面花多少功夫 <br /> <br />(三)uClinux的交叉編譯器,關(guān)于uClinux本身,我就是一頭霧水。 <br />經(jīng)人指點(diǎn),從uClinux.org找來(lái)uClinux的m68k-elf-gcc二進(jìn)制代碼壓縮包,在Redhat7.2下 <br />解壓縮,然后設(shè)置好PATH,重新login,m68k-elf-gcc可以執(zhí)行,編譯沒(méi)有任何函數(shù)的文 <br />件可以完成(只有一個(gè)加法運(yùn)算,可是也有19k大了),后嘗試在程序中使用printf、 <br />getc、putc、puts等函數(shù),編譯失敗。編譯過(guò)程如下: <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 />沒(méi)有l(wèi)d文件是不完整,可是-lc有效果,為什么-lio就沒(méi)有用呢?(我找過(guò)了, <br />lib里面有l(wèi)ibio.a庫(kù)包)后來(lái)我用objcopy看了一下,libc.a里面就有putc.o等庫(kù)文件 <br />我該怎么處理才能搞定這個(gè)問(wèn)題呢?另外如果就這么做下來(lái),看樣子執(zhí)行文件也小不了, <br />我應(yīng)該再怎么弄一下呢? <br /> <br />Redhat7.2是版本高了點(diǎn),可是我是直接當(dāng)來(lái)的二進(jìn)制代碼,又不用編譯, <br />應(yīng)該不是系統(tǒng)和原來(lái)gcc版本的問(wèn)題吧? <br /> <br />以上問(wèn)題見(jiàn)笑了,可是寫(xiě)了好半天,請(qǐng)各位大俠幫我想想辦法,謝謝各位了! <br /> <br />-- <br /> ((`'-"``""-'`)) <br /> ) - - ( <br /> / (o _ o) \ <br /> \ ( 0 ) / <br /> _'-.._'='_..-'_ <br /> /`;#'#'#.-.#'#'#;`\ <br /> <br /> <br />※ 來(lái)源:·BBS 水木清華站 smth.org·[FROM: 166.111.51.16] <br />發(fā)信人: c1 (牛皮), 信區(qū): Embedded <br />標(biāo) 題: Re: 討論討論free的交叉編譯器的問(wèn)題吧! <br />發(fā)信站: BBS 水木清華站 (Mon Jan 21 09:28:17 2002) <br /> <br />看來(lái)我們的興趣是一樣的,我也曾今問(wèn)過(guò)許多人但都是不太清楚。 <br />我自己使用的是SINGLE STEP的編譯連接調(diào)試器,做了一些有關(guān)68332 <br />的開(kāi)發(fā),我一直想找免費(fèi)的編譯連接調(diào)試器,也試著使用過(guò)GCC,GDB <br />(在CYGWIN上),不過(guò)最終沒(méi)有成功,很抱歉發(fā)表此文不能幫你解決 <br />問(wèn)題,但是我真的很希望大家多關(guān)注一下這方面的技術(shù),有免費(fèi)的 <br />而且性能也很不錯(cuò),我們?yōu)槭裁床挥??為什么要將白花花的銀子給老外? <br />如果有人是這方面的專家也請(qǐng)大家互相幫助,我先謝了。 <br /> <br />【 在 specialpig (草草◎走過(guò)去◎走過(guò)來(lái)) 的大作中提到: 】 <br />∶<i> 發(fā)在這個(gè)應(yīng)該沒(méi)有錯(cuò)吧?呵呵 </i><br />∶<i> 各位大俠好!我以前沒(méi)有學(xué)過(guò)多少編譯的知識(shí),最近對(duì)嵌入式感興趣,苦于組里 </i><br />∶<i> 沒(méi)有買過(guò)編譯器,于是開(kāi)始嘗試free的交叉編譯器,由于基礎(chǔ)太差,干起來(lái)感覺(jué) </i><br />∶<i> 非常吃力,水木上看了好久,也幾乎沒(méi)有這方面的文章。我想把我做過(guò)的都寫(xiě)出 </i><br />∶<i> 來(lái),遇到的問(wèn)題很多,請(qǐng)各位大俠指點(diǎn),我愿意花時(shí)間在這方面做嘗試,但請(qǐng)各 </i><br />∶<i> 位給詳細(xì)的指些路子出來(lái)!謝謝! </i><br />∶<i> 做free的東西,當(dāng)然是gcc,開(kāi)發(fā)板是一塊68332的板子 </i><br />∶<i> (一)我首先上網(wǎng)搜來(lái)了ashware公司做的交叉編譯的gcc——GccAshware.exe, </i><br />∶<i> 是個(gè)壓縮包,打開(kāi)以后,把系統(tǒng)的環(huán)境PATH設(shè)置一下就行了(該公司網(wǎng)站的解釋) </i><br />∶<i> 98和2000下都可以用,是在windows下模擬linux的部分環(huán)境,可以在command中 </i><br />∶<i> 使用ls等命令,make文件和ld文件都要自己寫(xiě)。 </i><br />∶<i> ................... </i><br /> <br />-- <br /> <br />※ 來(lái)源:·BBS 水木清華站 smth.org·[FROM: 211.71.69.23] <br />發(fā)信人: specialpig (草草◎走過(guò)去◎走過(guò)來(lái)), 信區(qū): Embedded <br />標(biāo) 題: Re: 討論討論free的交叉編譯器的問(wèn)題吧! <br />發(fā)信站: BBS 水木清華站 (Mon Jan 21 11:02:42 2002) <br /> <br />我把文章轉(zhuǎn)到飲水思源上去試一試! <br />【 在 c1 (牛皮) 的大作中提到: 】 <br />∶<i> 看來(lái)我們的興趣是一樣的,我也曾今問(wèn)過(guò)許多人但都是不太清楚。 </i><br />∶<i> 我自己使用的是SINGLE STEP的編譯連接調(diào)試器,做了一些有關(guān)68332 </i><br />∶<i> 的開(kāi)發(fā),我一直想找免費(fèi)的編譯連接調(diào)試器,也試著使用過(guò)GCC,GDB </i><br />∶<i> (在CYGWIN上),不過(guò)最終沒(méi)有成功,很抱歉發(fā)表此文不能幫你解決 </i><br />∶<i> 問(wèn)題,但是我真的很希望大家多關(guān)注一下這方面的技術(shù),有免費(fèi)的 </i><br />∶<i> 而且性能也很不錯(cuò),我們?yōu)槭裁床挥??為什么要將白花花的銀子給老外? </i><br />∶<i> 如果有人是這方面的專家也請(qǐng)大家互相幫助,我先謝了。 </i><br /> <br />
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -