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

首頁 > 學院 > 開發設計 > 正文

gcc 編譯動態庫及鏈接

2019-11-14 12:18:23
字體:
來源:轉載
供稿:網友

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;  }  現在,我們將三個test函數編譯為一個動態庫,使用一下命令:[plain]%20view%20plain%20copy%20gcc -fPIC -shared testa.c testb.c testc.c -o libtest.so  生成了libtest.so文件,其中,命令中

-shared該選項指定生成動態連接庫(讓連接器生成T類型的導出符號表,有時候也生成弱連接W類型的導出符號),不用該標志外部程序無法連接。相當于一個可執行文件-fPIC:表示編譯為位置獨立的代碼,不用此選項的話編譯后的代碼是位置相關的所以動態載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正代碼段共享的目的。

然后,通過通過命令

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

-L.:表示要連接的庫在當前目錄中-ltest:編譯器查找動態連接庫時有隱含的命名規則,即在給出的名字前面加上lib,后面加上.so來確定庫的名稱

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

此處,我們使用了第2中方法來使用該動態庫,先執行以下命令,設置LD_LIBRARY_PATH的值

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

[plain]%20view%20plain%20copy%20派生到我的代碼片./main 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 扎赉特旗| 宁城县| 富平县| 封开县| 辛集市| 五原县| 梁平县| 肇庆市| 方正县| 乌什县| 晋中市| 武陟县| 封丘县| 东乡| 嫩江县| 张家界市| 江油市| 阿勒泰市| 南宁市| 屏南县| 涪陵区| 黄骅市| 漯河市| 会同县| 明光市| 淮滨县| 抚远县| 城口县| 荔波县| 玉门市| 林西县| 依安县| 泗水县| 会理县| 屏东县| 保德县| 恭城| 黎川县| 云林县| 吉安县| 关岭|