linux動態(tài)庫編譯命令 linux動態(tài)庫的生成與使用

linux如何把多個.o編譯動態(tài)庫

第一步,找到需要打開的.o后綴文件,見下圖,轉(zhuǎn)到下面的步驟。第二步,執(zhí)行完上面的操作之后,打開編譯器,并在此處使用c-free5,選擇新文件,并將其保存為cpp格式,見下圖,轉(zhuǎn)到下面的步驟。

成都創(chuàng)新互聯(lián)專業(yè)提供成都主機(jī)托管四川主機(jī)托管成都服務(wù)器托管四川服務(wù)器托管,支持按月付款!我們的承諾:貴族品質(zhì)、平民價格,機(jī)房位于中國電信/網(wǎng)通/移動機(jī)房,西部信息機(jī)房服務(wù)有保障!

最簡單配置就是把連接庫目錄,添加到/etc/ld.so.conf中,一行一個目錄就行,添加完成后,執(zhí)行#ldconfig更新動態(tài)連接庫。

Step 由源文件編譯生成一堆.o,每個.o里都包含這個編譯單元的符號表Step ar命令將很多.o轉(zhuǎn)換成.a,成為靜態(tài)庫動態(tài)庫的后綴是.so,它由gcc加特定參數(shù)編譯產(chǎn)生。具體方法參見后文實(shí)例。

linux程序提示找不到動態(tài)庫,改成靜態(tài)庫

1、libc 和 lib-linux 這兩個最基本的庫都沒有,請問其他電腦上跑的是linux嗎?沒有這兩個庫,沒有一個程序可以運(yùn)行。另外,不可能把已有的動態(tài)庫“直接”轉(zhuǎn)換成靜態(tài)庫,你只能從源碼編譯出靜態(tài)庫。

2、原因是rcS 比/etc/profile先運(yùn)行,rcS是一開機(jī)第一個運(yùn)行的,這時候你的庫還沒有被連進(jìn)來。建議把./myXX 放在/etc/profile 的末尾。

3、靜態(tài)庫在程序編譯時會被連接到目標(biāo)代碼中,程序運(yùn)行時將不再需要該靜態(tài)庫。 動態(tài)庫在程序編譯時并不會被連接到目標(biāo)代碼中,而是在程序運(yùn)行是才被載入,因此在程序運(yùn)行時還需要動態(tài)庫存在。

4、在程序更新、部署、發(fā)布的時候,使用靜態(tài)庫相對麻煩,如果一個靜態(tài)庫更新了,那它的應(yīng)用程序都需要重新編譯,再發(fā)送給用戶,有的時候可能只是一個小的改動,但對于用戶來說,會導(dǎo)致整個程序重新下載。

linux動態(tài)庫函數(shù)重名的問題

1、Linux下動態(tài)庫文件的擴(kuò)展名為.so(Shared Object)。按照約定,所有動態(tài)庫文件名的形式是libname.so(可能在名字中加入版本號)。這樣,線程函數(shù)庫被稱作libthread.so。靜態(tài)庫的文件名形式是libname.a。

2、如果調(diào)用動態(tài)庫,那么動態(tài)庫的函數(shù)是extern,程序當(dāng)中如果有函數(shù)和這個extern函數(shù)重名,鏈接的時候就已經(jīng)把程序內(nèi)部的這個函數(shù)和那個extern的函數(shù)連在一起了,根本沒有機(jī)會再去調(diào)用動態(tài)庫的那個函數(shù)。糊涂了。

3、雖然動態(tài)庫有點(diǎn)浪費(fèi)內(nèi)存,但是動態(tài)庫最大的作用是:減少占用磁盤空間,減少開發(fā)時的編譯時間,而不是你想的編譯速度慢。因為采用了動態(tài)庫,所以如果我修改了動態(tài)庫,我只需要編譯動態(tài)庫。

4、你先確認(rèn)一下 dlopen 和 dlsym 是否確實(shí)成功 (返回值是否為 NULL?)。估計其中某一步肯定失敗了,而你沒有檢查返回值,后面函數(shù)調(diào)用的時候自然就出段錯誤了。從你自己的描述上看,代碼和操作本身沒有問題。

網(wǎng)頁名稱:linux動態(tài)庫編譯命令 linux動態(tài)庫的生成與使用
分享地址:http://muchs.cn/article40/deosgeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站建設(shè)、電子商務(wù)、微信公眾號、建站公司響應(yīng)式網(wǎng)站、網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營