五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

linux應(yīng)用基礎(chǔ)之GCC編譯器

2023-03-21 17:55 作者:我會讀心術(shù)喲  | 我要投稿

????????在編寫單片機程序時,有如keil,iar這類IDE開發(fā)工具來幫忙對程序進行一整套的編譯,生成可執(zhí)行文件,在linux一般公司都會要求懂編譯過程,因為這開發(fā)過程中需要看懂makefile,而makefile的重要基礎(chǔ)之一就是編譯,所以GCC編譯是學(xué)習(xí)linux的必經(jīng)過程;

????????首先第一步我們要了解GCC它能干啥,GCC能幫我們把.C文件編譯成可執(zhí)行文件(也就是我們所需要的目標(biāo)文件),怎么編譯的呢,編譯過程如下:

????

gcc編譯過程

?????總結(jié)GCC的使用

多文件編譯:

gcc -c -o main.o main.c

gcc -c -o sub.o sub.c

gcc -o test main.o sub.o


生成靜態(tài)庫:

?首先,將代碼文件編譯成目標(biāo)文件.o(StaticMath.o)

g++ -c? -o StaticMath.cpp

注意帶參數(shù)-c,否則直接編譯為可執(zhí)行文件

然后,通過ar工具將目標(biāo)文件打包成.a靜態(tài)庫文件

ar -crv libstaticmath.a StaticMath.o生成靜態(tài)庫libstaticmath.a。


靜態(tài)庫的使用:

gcc -o test main.o libsub.a,不需要吧靜態(tài)庫放到板子上


生成動態(tài)庫:

gcc -c -fPIC -o sub.o sub.c

gcc -shared -o libsub.so sub.o

或者

gcc? -shared? -fPIC -o libsub.so sub.c交叉編譯需要在最后面加上 -fPIC 參數(shù)

不加-fPIC的SO庫需要進行重定位才能找到函數(shù);

加-fPIC的SO庫會在連接時生成位置虛擬列表,不需要進行位置重定位;


動態(tài)庫的使用:

gcc -o test main.o -lsub -L /libsub.so/ 所在目錄/,需要先把 libsub.so 放到 Ubuntu 的/lib 目錄

如果不想把 libsub.so 放到/lib,也可以放在某個目錄比如/a,執(zhí)行

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/a


容易碰到的編譯選項,記住選項參數(shù)就行

gcc -E -dM main.c > 1.txt //? 把所有的宏展開,存在 1.txt? 里

gcc -Wp,-MD,abc.dep -c -o main.o main.c // 生成依賴文件 abc.dep ,后面 Makefile? 會用


當(dāng)我們在進行編譯的時候免不了要去鏈接庫文件,以下命令用來查詢庫文件和頭文件分別放在那個目錄下

echo 'main(){}'| gcc -E -v - //? 它會列出頭文件目錄、庫目錄(LIBRARY_PATH)

把生成的動態(tài)庫,或者靜態(tài)庫或者頭文件分別放在這個目錄下;


最后總結(jié)一下頭文件和庫文件被編譯鏈接時候查詢方式


頭文件:指定目錄查詢(一般在工具鏈中查找)或者用-I?dir

庫文件:指定目錄(一般在工具鏈中查找)或者-L?dir

運行時候.so:/lib? ?/usr/lib? 自己制定目錄(LD_LIBRARY_PATH)








linux應(yīng)用基礎(chǔ)之GCC編譯器的評論 (共 條)

分享到微博請遵守國家法律
华池县| 云龙县| 绵竹市| 九龙县| 陵水| 淅川县| 兴海县| 怀宁县| 昭苏县| 江达县| 托里县| 平遥县| 东兴市| 宜宾市| 岱山县| 上饶县| 井冈山市| 宁波市| 洞头县| 出国| 新昌县| 孟村| 富源县| 澳门| 特克斯县| 平舆县| 巴中市| 宿松县| 务川| 芜湖县| 扬州市| 福建省| 黄陵县| 华池县| 五莲县| 岢岚县| 湄潭县| 玉树县| 石门县| 东乌珠穆沁旗| 八宿县|