真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

CC++動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用-創(chuàng)新互聯(lián)

靜態(tài)庫(kù)的用法

靜態(tài)庫(kù)的文件名 libxxx.a -->對(duì)應(yīng)windows的.lib文件做靜態(tài)庫(kù)的命令:
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

西林網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),西林網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為西林超過(guò)千家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站制作要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的西林做網(wǎng)站的公司定做!

使用靜態(tài)庫(kù):
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

注意:-L的作用是告訴gcc你的libxxx.a放在了哪個(gè)目錄里;-l的作用是告訴gcc使用哪個(gè)靜態(tài)庫(kù)。
舉個(gè)例子,目錄結(jié)果如下:
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

head.h
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

add.c
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

sub.c
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

mul.c
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

步驟1:在src目錄執(zhí)行下面的命令,生產(chǎn).o文件

C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

執(zhí)行后,在src目錄下生產(chǎn)了add.o,sub.o,mul.o三個(gè)文件

步驟2:在src目錄執(zhí)行下面的命令,生產(chǎn)libCalc.a文件

C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

在src目錄執(zhí)行下面的命令,把libCalc.a移動(dòng)到上層的lib文件夾

C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

執(zhí)行后,在lib文件夾出現(xiàn)了libCalc.a

main.c
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

步驟4:在src的上層目錄,執(zhí)行下面命令生產(chǎn)a.out文件

C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

  • -I:指定頭文件所在的路徑
  • -L:指定靜態(tài)庫(kù)文件所在的路徑
  • -l:指定使用哪個(gè)靜態(tài)庫(kù)

最后目錄結(jié)構(gòu)如下:
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

動(dòng)態(tài)庫(kù)的用法

動(dòng)態(tài)庫(kù)的文件名 libxxx.so(對(duì)應(yīng)windows的.dll文件) 編譯時(shí),需要加【-fPIC】選項(xiàng)。它的作用是,編譯出與位置無(wú)關(guān)的代碼。因?yàn)閯?dòng)態(tài)庫(kù)在加載到下圖的共享庫(kù)區(qū)的時(shí)候,不一定加載到哪個(gè)位置,所以加了-fPIC后,就記錄了每個(gè)函數(shù)相對(duì)于這個(gè)動(dòng)態(tài)庫(kù)頭地址的偏移,加載后動(dòng)態(tài)庫(kù)在內(nèi)存里的頭地址是知道的,又知道了每個(gè)函數(shù)相對(duì)于頭的偏移量,自然而然地就能夠找到每個(gè)函數(shù)在內(nèi)存里的位置了。
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

做靜態(tài)庫(kù)的命令(-shared):
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

用【ldd】命令查看編譯出來(lái)的可執(zhí)行文件文件
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

結(jié)果如下:
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用
發(fā)現(xiàn)【libCalc.so => not found】

解決辦法1:

把做好的動(dòng)態(tài)庫(kù)libCalc.so拷貝到【/lib】或者【/usr/lib】下,也可以用ln做軟硬連接:把當(dāng)前目錄下的lib目錄下的libCalc.so鏈接到/lib下
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

結(jié)果如下:
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

發(fā)現(xiàn)軟連接是紅色的,也就是不能使用的意思,錯(cuò)誤在于./lib/libCalc.so這個(gè)路徑是不存在的,原因在于上面的命令使用的是相對(duì)路徑,改成絕對(duì)路徑就OK了,命令如下:
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

結(jié)果如下:
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用
發(fā)現(xiàn)軟連接是綠色的了,說(shuō)明庫(kù)可以使用了。

再用【ldd】命令查看編譯出來(lái)的可執(zhí)行文件文件 ldd a.out, 結(jié)果如下:
C C++ 動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用

但是這種方法不推薦使用。理由是,放在了系統(tǒng)的動(dòng)態(tài)庫(kù)目錄里,容易和別的庫(kù)重復(fù),發(fā)生沖突。

解決辦法2:告訴系統(tǒng),給我加一個(gè)動(dòng)態(tài)庫(kù)的路徑,這個(gè)是最好的辦法。

首先編輯/etc/ld.so.conf文件,添加你自己的庫(kù)的路徑 然后,執(zhí)行:【sudo ldconfig】,就OK了。

靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)的特點(diǎn):

  • 靜態(tài)庫(kù):
    編譯的時(shí)候,直接把靜態(tài)庫(kù)的代碼直接編譯到目標(biāo)文件
    執(zhí)行速度快,不需要在執(zhí)行的時(shí)候加載動(dòng)態(tài)庫(kù)
    庫(kù)文件修改后,必須重新編譯使用庫(kù)的代碼

  • 動(dòng)態(tài)庫(kù)
    編譯的時(shí)候,不把靜態(tài)庫(kù)的代碼直接編譯到目標(biāo)文件
    執(zhí)行速度慢,在執(zhí)行的時(shí)候需要加載動(dòng)態(tài)庫(kù)
    庫(kù)文件修改后,一般不需要重新編譯使用庫(kù)的代碼,只有在庫(kù)的接口改變時(shí),才需要重新編譯使用庫(kù)的代碼。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。


新聞標(biāo)題:CC++動(dòng)態(tài)庫(kù)與靜態(tài)庫(kù)的制作與使用-創(chuàng)新互聯(lián)
鏈接分享:http://weahome.cn/article/dsscid.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部