?? 00000000.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 + -