最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

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

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

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

????????在編寫單片機(jī)程序時,有如keil,iar這類IDE開發(fā)工具來幫忙對程序進(jìn)行一整套的編譯,生成可執(zhí)行文件,在linux一般公司都會要求懂編譯過程,因?yàn)檫@開發(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庫需要進(jìn)行重定位才能找到函數(shù);

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


動態(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


容易碰到的編譯選項(xiàng),記住選項(xiàng)參數(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)我們在進(jìn)行編譯的時候免不了要去鏈接庫文件,以下命令用來查詢庫文件和頭文件分別放在那個目錄下

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

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


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


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

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

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








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

分享到微博請遵守國家法律
石台县| 钦州市| 当阳市| 望江县| 贵德县| 卓资县| 莱芜市| 壤塘县| 酒泉市| 山西省| 八宿县| 敦煌市| 永修县| 色达县| 临潭县| 扶风县| 岳普湖县| 铁岭市| 湖州市| 南昌县| 绥宁县| 桂阳县| 揭西县| 资兴市| 湘乡市| 潢川县| 临沭县| 海阳市| 莱芜市| 虞城县| 凤凰县| 建阳市| 土默特右旗| 五指山市| 富民县| 谷城县| 图们市| 普兰店市| 手游| 聂荣县| 栾川县|