国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

gcc 編譯動(dòng)態(tài)庫(kù)及鏈接

2019-11-14 10:53:20
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

1.testa.c

[cpp] view plain copy 在CODE上查看代碼片#include <stdio.h>  void Test_a()  {    #include <stdio.h>  void Test_b()  {    printf("This is Test_b!");  }  3.%20testc.c[cpp]%20view%20plain%20copy%20#include <stdio.h>  void Test_c()  {    printf("This is Test_c!");  }  4.%20testh.h[cpp]%20view%20plain%20copy%20void Test_a();  void Test_b();  void Test_c();  

5.%20main.c

[cpp]%20view%20plain%20copy%20#include "testh.h"  int main()  {    Test_a();    Test_b();    Test_c();    return 0;  }  現(xiàn)在,我們將三個(gè)test函數(shù)編譯為一個(gè)動(dòng)態(tài)庫(kù),使用一下命令:[plain]%20view%20plain%20copy%20gcc -fPIC -shared testa.c testb.c testc.c -o libtest.so  生成了libtest.so文件,其中,命令中

-shared該選項(xiàng)指定生成動(dòng)態(tài)連接庫(kù)(讓連接器生成T類型的導(dǎo)出符號(hào)表,有時(shí)候也生成弱連接W類型的導(dǎo)出符號(hào)),不用該標(biāo)志外部程序無(wú)法連接。相當(dāng)于一個(gè)可執(zhí)行文件-fPIC:表示編譯為位置獨(dú)立的代碼,不用此選項(xiàng)的話編譯后的代碼是位置相關(guān)的所以動(dòng)態(tài)載入時(shí)是通過(guò)代碼拷貝的方式來(lái)滿足不同進(jìn)程的需要,而不能達(dá)到真正代碼段共享的目的。

然后,通過(guò)通過(guò)命令

[plain]%20view%20plain%20copy%20gcc main.c -L. -ltest -omain  編譯生成應(yīng)用程序main,其中命令中

-L.:表示要連接的庫(kù)在當(dāng)前目錄中-ltest:編譯器查找動(dòng)態(tài)連接庫(kù)時(shí)有隱含的命名規(guī)則,即在給出的名字前面加上lib,后面加上.so來(lái)確定庫(kù)的名稱

 %20 %20我們知道一個(gè)程序要想在內(nèi)存中運(yùn)行,除了編譯之外還要經(jīng)過(guò)鏈接和裝入這兩個(gè)步驟。當(dāng)然linux中動(dòng)態(tài)鏈接也是經(jīng)過(guò)這三個(gè)過(guò)程。Linux%20使用這個(gè)ld-linux.so*中的來(lái)裝載(其實(shí)這只是一個(gè)鏈接)其他庫(kù)。所以這個(gè)庫(kù)必須放在linux中/lib下。對(duì)于其他,通常我們共享庫(kù)放在/lib這個(gè)路徑下,而且也是系統(tǒng)默認(rèn)的搜索路徑。Linux共享庫(kù)的搜索路徑先后順序:1、編譯目標(biāo)代碼時(shí)指定的動(dòng)態(tài)庫(kù)搜索路徑:在編譯的時(shí)候指定-Wl,-rpath=路徑2、環(huán)境變量LD_LIBRARY_PATH指定的動(dòng)態(tài)庫(kù)搜索路徑3、配置文件/etc/ld.so.conf中指定的動(dòng)態(tài)庫(kù)搜索路徑4、默認(rèn)的動(dòng)態(tài)庫(kù)搜索路徑/lib5、默認(rèn)的動(dòng)態(tài)庫(kù)搜索路徑%20/usr/lib

此處,我們使用了第2中方法來(lái)使用該動(dòng)態(tài)庫(kù),先執(zhí)行以下命令,設(shè)置LD_LIBRARY_PATH的值

[plain]%20view%20plain%20copy%20export LD_LIBRARY_PATH=.  之后,使用一下命令即可

[plain]%20view%20plain%20copy%20派生到我的代碼片./main 
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 平阴县| 舞钢市| 阳朔县| 崇信县| 绩溪县| 德州市| 秭归县| 石狮市| 乐安县| 方山县| 榆社县| 剑阁县| 威远县| 邢台县| 长沙县| 鲁甸县| 同仁县| 台湾省| 屏东县| 陵水| 龙井市| 洛浦县| 镇坪县| 南川市| 乐陵市| 琼中| 浦江县| 莫力| 福鼎市| 泰兴市| 牙克石市| 斗六市| 太湖县| 斗六市| 大庆市| 浦江县| 五原县| 天祝| 阳山县| 桃源县| 东丰县|