上述兩者的區(qū)別:
GCC(GUN Compiler Colletion),是指GUN編譯器集合包含眾多語(yǔ)言得到編譯器如C語(yǔ)言(gcc),C++(g++),Java語(yǔ)言(jdk)、D語(yǔ)言(gdc)、等
gcc 則指的是單純的C語(yǔ)言編譯器
當(dāng)代的嵌入式開(kāi)發(fā)已經(jīng)和傳統(tǒng)的嵌入式開(kāi)發(fā)不同,硬件性能的提升使其越來(lái)越接近桌面開(kāi)發(fā),使用的開(kāi)發(fā)語(yǔ)言也越來(lái)越多樣,內(nèi)核和驅(qū)動(dòng)開(kāi)發(fā)使用C語(yǔ)言,應(yīng)用開(kāi)發(fā)使用gcc/g++/gdc等。
創(chuàng)新互聯(lián)專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、成都網(wǎng)站設(shè)計(jì)、成都外貿(mào)網(wǎng)站建設(shè)、平利網(wǎng)絡(luò)推廣、微信小程序開(kāi)發(fā)、平利網(wǎng)絡(luò)營(yíng)銷、平利企業(yè)策劃、平利品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)為所有大學(xué)生創(chuàng)業(yè)者提供平利建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:jinyejixie.com
兩種開(kāi)發(fā)模式:
A.非嵌入式開(kāi)發(fā):A(類)機(jī)編寫(xiě)(源代碼)、編譯得到可執(zhí)行程序,發(fā)布給A(類)機(jī)運(yùn)行。
B.嵌入式開(kāi)發(fā) :A(類)機(jī)編寫(xiě)(源代碼)、編譯得到可執(zhí)行程序,發(fā)布給B(類)機(jī)運(yùn)行。
為何使用交叉編譯
嵌入式產(chǎn)品由于資源受限,不能直接在嵌入式產(chǎn)品上進(jìn)行編程,所以選擇在PC主機(jī)上進(jìn)行源碼編寫(xiě)和編譯,最終生成在嵌入式設(shè)備上運(yùn)行的程序。
交叉編譯可以用高性能機(jī)器為低性能機(jī)器開(kāi)發(fā)軟件(包括裸機(jī)軟件、系統(tǒng)級(jí)和應(yīng)用級(jí)軟件)
交叉編譯特點(diǎn):
必須使用專用的交叉編譯工具鏈。由于可執(zhí)行程序不能本地運(yùn)行調(diào)試,因此必須配合一定手段(專用調(diào)試器、JTAG調(diào)試器、USB下載、串口下載、SD啟動(dòng)、網(wǎng)絡(luò)共享等)將可執(zhí)行程序加載到目標(biāo)嵌入式設(shè)備上運(yùn)行及調(diào)試。
gcc如何進(jìn)行交叉編譯?
配置目標(biāo)主機(jī)的編譯工具鏈(如arm-linux),配置工具鏈的具體版本。
根據(jù)具體的目標(biāo)代碼選擇相應(yīng)的工具鏈版本
正確使用關(guān)于硬件體系結(jié)構(gòu)的特殊編譯選項(xiàng)
大型企業(yè)嵌入式開(kāi)發(fā)環(huán)境:
我們通常所將的編譯器實(shí)際上是指廣義的編譯器,包含下面四個(gè)部分:
整個(gè)編譯過(guò)程如下面所示:
預(yù)處理器完成:頭文件原地展開(kāi)、宏定義替換、注釋刪除工作。
編譯器(狹義上的):完成各種語(yǔ)言到目標(biāo)平臺(tái)的會(huì)變文件的翻譯工作。
匯編器:將平臺(tái)回避那文件編譯成最終的二進(jìn)制文件(.O文件)
鏈接器:將最終的二進(jìn)制文件按照連接腳本的內(nèi)容,鏈接稱為最中的可執(zhí)行文件Linux中為elf文件。
整個(gè)過(guò)程:源碼.c->(預(yù)處理)->預(yù)處理過(guò)的.i源文件->(編譯)->匯編文件.S->(匯編)->目標(biāo)文件.o->(鏈接)->elf可執(zhí)行程序
多語(yǔ)言混合開(kāi)發(fā)時(shí)當(dāng)×××發(fā)中常見(jiàn)的開(kāi)發(fā)方式,優(yōu)勢(shì)在于節(jié)省人力成本,提高開(kāi)發(fā)效率。
方式一:目標(biāo)平臺(tái)匯編文件的統(tǒng)一
行業(yè)案例:
方式二:目標(biāo)平臺(tái)二進(jìn)制文件的統(tǒng)一
行業(yè)案例:
方式三:利用進(jìn)程間通信進(jìn)行協(xié)同
行業(yè)案例:
預(yù)處理指令: gcc -E file.c -o file.i
編譯指令 : gcc -S file.i -o file.s
匯編指令 : gcc -c file.s -o file.o
生成映射文件: gcc test.c -Wl,-Map=test.map (注意逗號(hào)后面沒(méi)有空格)
宏定義:gcc test.c -D 'TEST="PENGCHAO"' gcc test.c -D TEST=110
獲取系統(tǒng)頭文件路徑; gcc -v file.c
獲取目標(biāo)的完整依賴關(guān)系:gcc -M test.c
獲取目標(biāo)的部分依賴關(guān)系:gcc -MM test.c
制定庫(kù)文件及庫(kù)文件的搜索路徑
-L 指令庫(kù)文件搜索路徑
-l 指定庫(kù)文件名
gcc test.c -L -lfunc
靜態(tài)庫(kù)生成命令:ar -rc libfunc.a func.o
動(dòng)態(tài)庫(kù)生成命令:gcc func.c -o func.o -c -fPIC
gcc -o libfunc.so func.o -shared
nm命令也很有用,它可以用來(lái)查看一個(gè).a文件中都有哪些符號(hào)
ldd命令:作用是可以在一個(gè)使用了共享庫(kù)的程序執(zhí)行之前解析出這個(gè)程序使用了哪些共享庫(kù),并且查看這些共享庫(kù)是否能被找到,能被解析(決定這個(gè)程序是否能正確執(zhí)行)。
注意:動(dòng)態(tài)鏈接庫(kù)運(yùn)行時(shí)需要被加載(運(yùn)行時(shí)環(huán)境在執(zhí)行test程序的時(shí)候發(fā)現(xiàn)他動(dòng)態(tài)鏈接了libfunc.so,于是乎會(huì)去固定目錄(/user/lib)嘗試加載libfunc.so,如果加載失敗則會(huì)打印:error while loading shared libraries: libfunc.so: cannot open shared object file: No such file or directory
解決辦法:
A.將動(dòng)態(tài)庫(kù)文件拷貝到系統(tǒng)庫(kù)文件目錄(不推薦)
B.將動(dòng)態(tài)庫(kù)文件所在目錄導(dǎo)出到環(huán)境變量LD_LIBRARY_PATH,export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:path_name
分享文章:嵌入式C語(yǔ)言編譯器
瀏覽地址:http://jinyejixie.com/article20/ghogjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、定制開(kāi)發(fā)、網(wǎng)站制作、品牌網(wǎng)站建設(shè)、關(guān)鍵詞優(yōu)化、營(yíng)銷型網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)