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

首頁 > 系統 > Linux > 正文

gcc 動態編譯

2020-06-13 12:29:14
字體:
來源:轉載
供稿:網友
gcc 動態編譯(共享庫) 動態編譯的可執行文件需要附帶一個的動態鏈接庫,在執行時,需要調用其對應動態鏈接庫中的命令
 
 
優點:體積小,編譯快 
缺點:依賴性高 


復制代碼
代碼如下:

[root@74-82-173-217 shared]# cat add.c 
int add (int x, int y) { 
return x + y; 

Parsed in 0.007 seconds at 12.13 KB/s 
add.c 求和函數 

復制代碼
代碼如下:

[root@74-82-173-217 shared]# cat print.c 
#include <stdio.h> 
void print (int x) { 
printf ("%d/n",x); 

Parsed in 0.007 seconds at 14.78 KB/s 
print 打印函數 


復制代碼
代碼如下:

[root@74-82-173-217 shared]# cat head.h 
#ifndf HEAD_H 
#define HEAD_H 
int add (int ,int); 
void print (int); 
#endif 

Parsed in 0.007 seconds at 16.34 KB/s 
head.h 聲明頭文件 

復制代碼
代碼如下:

[root@74-82-173-217 shared]# cat main.c 
#include <stdio.h> 
#include "head.h" 
int main () { 
int x = add(3, 5); 
print(x); 

Parsed in 0.007 seconds at 19.70 KB/s 
main.c 主函數 

1、編譯動態庫 
[root@74-82-173-217 shared]# gcc -fpic -shared add.c print.c -o libd.so 
使用 -fpic -shared 參數生成 libd.so 動態庫 

2、生成執行文件 
[root@74-82-173-217 shared]# gcc main.c libd.so -o main 
加載動態庫,生成main執行文件 

3、動態庫加載 
[root@74-82-173-217 shared]# ./main 
./main: error while loading shared libraries: libd.so: cannot open shared object file: No such file or directory 
因為我們是以動態庫編譯,執行main時由于找不到 libd.so 庫導致執行失敗,可以使用 ldd main來查看 libd.so未找到 


復制代碼
代碼如下:

[root@74-82-173-217 shared]# ldd main 
linux-gate.so.1 => (0x0070c000) 
libd.so => not found 
libc.so.6 => /lib/i686/nosegneg/libc.so.6 (0x0050e000) 
/lib/ld-linux.so.2 (0x00ea6000) 

Parsed in 0.000 seconds at 434.42 KB/s 
解決此問題有三種方法, 
1、把動態庫路徑添加到環境變量中 
[root@74-82-173-217 shared]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/c/shared/ 

2、把動態庫路徑添加到 ld.so.conf中 
[root@74-82-173-217 shared]# echo "/root/c/shared" >> /etc/ld.so.conf 
[root@74-82-173-217 shared]# ldconfig 
重新搜索所有動態庫,并更新到 /etc/ld.so.cache 
[root@74-82-173-217 shared]# ldconfig -v|grep libd.so 
查找當前是否包含 libd.so 庫 

3、直接復制到系統目錄下 
[root@74-82-173-217 shared]# cp libd.so /lib/ 

gcc參數 
-shared: 
該選項指定生成動態連接庫(讓連接器生成T類型的導出符號表,有時候也生成弱連接W類型的導出符號),不用該標志外部程序無法連接。相當于一個可執行文件 

-fpic: 
表示編譯為位置獨立的代碼,不用此選項的話編譯后的代碼是位置相關的所以動態載入時是通過代碼拷貝的方式來滿足不同進程的需要,而不能達到真正代碼段共享的目的。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 千阳县| 福安市| 海盐县| 土默特左旗| 临漳县| 东平县| 瓮安县| 工布江达县| 武定县| 沂南县| 正安县| 宜兰县| 于都县| 曲水县| 女性| 余庆县| 张掖市| 鄯善县| 富川| 乌鲁木齐县| 定结县| 镇远县| 乳源| 沙坪坝区| 平潭县| 澄迈县| 碌曲县| 宁南县| 福海县| 元江| 河北省| 扎赉特旗| 甘谷县| 社旗县| 蓬莱市| 本溪市| 赣州市| 琼海市| 岳普湖县| 胶州市| 名山县|