国产精品天干天干,亚洲毛片在线,日韩gay小鲜肉啪啪18禁,女同Gay自慰喷水

歡迎光臨散文網(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é)習linux的必經(jīng)過程;

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

????

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)庫:

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

g++ -c? -o StaticMath.cpp

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

然后,通過ar工具將目標文件打包成.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? 會用


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

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編譯器的評論 (共 條)

分享到微博請遵守國家法律
琼结县| 类乌齐县| 波密县| 边坝县| 南溪县| 枣阳市| 格尔木市| 汕尾市| 班戈县| 通榆县| 上饶市| 昌都县| 枣强县| 八宿县| 海淀区| 台山市| 东安县| 邓州市| 开化县| 绥滨县| 康平县| 绥江县| 长海县| 南澳县| 双牌县| 望江县| 宁武县| 乌海市| 建始县| 江阴市| 特克斯县| 金川县| 牙克石市| 翁源县| 苍山县| 平湖市| 克拉玛依市| 南安市| 尼勒克县| 德格县| 麻栗坡县|