新聞中心
linux靜態(tài)庫怎么編譯
1、先來看個(gè)圖表一(列出了可執(zhí)行文件、靜態(tài)庫、頭文件和數(shù)據(jù)文件,四種書寫Makefile.am文件個(gè)一般格式。
成都創(chuàng)新互聯(lián)是專業(yè)的科爾沁左翼網(wǎng)站建設(shè)公司,科爾沁左翼接單;提供網(wǎng)站設(shè)計(jì)制作、成都網(wǎng)站設(shè)計(jì),網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行科爾沁左翼網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
2、Step 由源文件編譯生成一堆.o,每個(gè).o里都包含這個(gè)編譯單元的符號(hào)表Step ar命令將很多.o轉(zhuǎn)換成.a,成為靜態(tài)庫動(dòng)態(tài)庫的后綴是.so,它由gcc加特定參數(shù)編譯產(chǎn)生。具體方法參見后文實(shí)例。
3、可以看到,生成了testo,testo兩個(gè)目標(biāo)文件,然后,使用ar命令:ar crv libtest.a *.o將該目錄下的所有目標(biāo)文件打包生成了libtest.a文件。這樣,你在編譯的時(shí)候就可以直接使用這個(gè)靜態(tài)庫了。
4、缺點(diǎn):消耗資源較大,每個(gè)進(jìn)程在使用靜態(tài)庫的時(shí)候,都要復(fù)制一份才可以,這也就造成了內(nèi)存的消耗。
linux程序提示找不到動(dòng)態(tài)庫,改成靜態(tài)庫
1、libc 和 lib-linux 這兩個(gè)最基本的庫都沒有,請(qǐng)問其他電腦上跑的是linux嗎?沒有這兩個(gè)庫,沒有一個(gè)程序可以運(yùn)行。另外,不可能把已有的動(dòng)態(tài)庫“直接”轉(zhuǎn)換成靜態(tài)庫,你只能從源碼編譯出靜態(tài)庫。
2、原因是rcS 比/etc/profile先運(yùn)行,rcS是一開機(jī)第一個(gè)運(yùn)行的,這時(shí)候你的庫還沒有被連進(jìn)來。建議把./myXX 放在/etc/profile 的末尾。
3、在程序更新、部署、發(fā)布的時(shí)候,使用靜態(tài)庫相對(duì)麻煩,如果一個(gè)靜態(tài)庫更新了,那它的應(yīng)用程序都需要重新編譯,再發(fā)送給用戶,有的時(shí)候可能只是一個(gè)小的改動(dòng),但對(duì)于用戶來說,會(huì)導(dǎo)致整個(gè)程序重新下載。
4、Step 由源文件編譯生成一堆.o,每個(gè).o里都包含這個(gè)編譯單元的符號(hào)表Step ar命令將很多.o轉(zhuǎn)換成.a,成為靜態(tài)庫動(dòng)態(tài)庫的后綴是.so,它由gcc加特定參數(shù)編譯產(chǎn)生。具體方法參見后文實(shí)例。
5、一個(gè)程序調(diào)用了一個(gè)動(dòng)態(tài)庫,但是兩者之間有函數(shù)重名,導(dǎo)致運(yùn)行時(shí)動(dòng)態(tài)庫中的Linux下動(dòng)態(tài)庫文件的擴(kuò)展名為這樣,線程函數(shù)庫被稱作libthread.so。
6、ar -tv test.a 解壓靜態(tài)庫:ar -x test.a 查看程序依賴的動(dòng)態(tài)庫:readelf -a xxx|grep library 如:可以看到,下面的交叉程序hello執(zhí)行依賴于如下兩個(gè)動(dòng)態(tài)庫。
linux下連接靜態(tài)庫的問題
gcc ao ao ao aa aa -o canrun.bin 按此格式就可以將很多不管是什么名字的目標(biāo)文件鏈接為一個(gè)可執(zhí)行的文件,在運(yùn)行時(shí)在SHELL下輸入:./canrun.bin就可以運(yùn)行了。
ar -tv test.a 解壓靜態(tài)庫: ar -x test.a 查看程序依賴的動(dòng)態(tài)庫: readelf -a xxx|grep library 如:可以看到,下面的交叉程序hello執(zhí)行依賴于如下兩個(gè)動(dòng)態(tài)庫。
Linux的靜態(tài)庫是以.a結(jié)尾的,要連接靜態(tài)庫有兩種方法,一種是在編譯命令最后直接加上庫路徑/庫名稱。例如你的庫在絕對(duì)目錄/lib/libtest.a下面 你就可以這樣來編譯 你可以用-L制定庫的目錄,用-l指定庫的名稱。
新聞標(biāo)題:linux安裝靜態(tài)庫命令 linux 靜態(tài)庫
轉(zhuǎn)載注明:http://fisionsoft.com.cn/article/dihghhh.html