亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來(lái)到思海網(wǎng)絡(luò),我們將竭誠(chéng)為您提供優(yōu)質(zhì)的服務(wù)! 誠(chéng)征網(wǎng)絡(luò)推廣 | 網(wǎng)站備案 | 幫助中心 | 軟件下載 | 購(gòu)買(mǎi)流程 | 付款方式 | 聯(lián)系我們 [ 會(huì)員登錄/注冊(cè) ]
促銷(xiāo)推廣
客服中心
業(yè)務(wù)咨詢(xún)
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352289
點(diǎn)擊這里給我發(fā)消息  81721488
有事點(diǎn)擊這里…  376585780
有事點(diǎn)擊這里…  872642803
有事點(diǎn)擊這里…  459248018
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  380791050
技術(shù)支持
有事點(diǎn)擊這里…  714236853
有事點(diǎn)擊這里…  719304487
有事點(diǎn)擊這里…  1208894568
有事點(diǎn)擊這里…  61352289
在線(xiàn)客服
有事點(diǎn)擊這里…  531199185
有事點(diǎn)擊這里…  61352288
有事點(diǎn)擊這里…  983054746
有事點(diǎn)擊這里…  893984210
當(dāng)前位置:首頁(yè) >> 技術(shù)文章 >> 文章瀏覽
技術(shù)文章

Linux中如何創(chuàng)建靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)

添加時(shí)間:2011-2-1  添加: admin 

  函數(shù)庫(kù)分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)兩種。

  靜態(tài)庫(kù)在程序編譯時(shí)會(huì)被連接到目標(biāo)代碼中,程序運(yùn)行時(shí)將不再需要該靜態(tài)庫(kù)。

  動(dòng)態(tài)庫(kù)在程序編譯時(shí)并不會(huì)被連接到目標(biāo)代碼中,而是在程序運(yùn)行是才被載入,因此在程序運(yùn)行時(shí)還需要?jiǎng)討B(tài)庫(kù)存在。

  程序1: hello.h

  #ifndef HELLO_H

  #define HELLO_H

  void hello(const char *name);

  #endif //HELLO_H

  程序2: hello.c

  #include

  void hello(const char *name)

  {

  printf("Hello %s!\n", name);

  }

  程序3: main.c

  #include "hello.h"

  int main()

  {

  hello("everyone");

  return 0;

  }

  無(wú)論動(dòng)態(tài)庫(kù)還是靜態(tài)庫(kù)都需要用到.o文件來(lái)生成,先編譯生成.o文件。

  # gcc -c hello.c

  1:創(chuàng)建靜態(tài)庫(kù)

  靜態(tài)庫(kù)文件名的命名規(guī)范是以lib為前綴,緊接著跟靜態(tài)庫(kù)名,擴(kuò)展名為.a。例如:我們將創(chuàng)建的靜態(tài)庫(kù)名為myhello,則靜態(tài)庫(kù)文件名就是libmyhello.a。

  # ar cr libmyhello.a hello.o

  使用靜態(tài)庫(kù):只需要在你的源程序中加入包含你所需要使用到的函數(shù)的聲明(即包含頭文件),然后在gcc生成目標(biāo)文件時(shí)候指明靜態(tài)庫(kù)就OK了(除非你包含的頭文件在/usr/include,庫(kù)文件在標(biāo)準(zhǔn)庫(kù)/usr/lib,/lib下,否則你得顯示指明他們的路徑)

  # gcc -o hello main.c -L. -lmyhello

  # ./hello

  Hello everyone!

  刪除靜態(tài)庫(kù)文件運(yùn)行./hello,程序正常運(yùn)行,說(shuō)明靜態(tài)庫(kù)公用函數(shù)已經(jīng)鏈接到目標(biāo)文件。

  2: 利用.o文件創(chuàng)建動(dòng)態(tài)庫(kù)

  動(dòng)態(tài)庫(kù)文件擴(kuò)展名為.so。

  # gcc -shared -fPCI -o libmyhello.so hello.o

  動(dòng)態(tài)庫(kù)的使用與靜態(tài)庫(kù)使用方式一樣

  # gcc -o hello main.c -L. -lmyhello

  # ./hello

  ./hello: error while loading shared libraries: libmyhello.so: cannot open shared object file: No such file or directory

  哦!出錯(cuò)了。快看看錯(cuò)誤提示,原來(lái)是找不到動(dòng)態(tài)庫(kù)文件libmyhello.so。程序在運(yùn)行時(shí),會(huì)在/usr/lib和/lib等目錄中查找需要的動(dòng)態(tài)庫(kù)文件。若找到,則載入動(dòng)態(tài)庫(kù),否則將提示類(lèi)似上述錯(cuò)誤而終止程序運(yùn)行。

  如何找到生成的動(dòng)態(tài)庫(kù)有3種方式:

  1)把庫(kù)拷貝到/usr/lib和/lib目錄下。

  (2)在LD_LIBRARY_PATH環(huán)境變量中加上庫(kù)所在路徑。

  例如動(dòng)態(tài)庫(kù)libhello.so在/home/example/lib目錄下:

  $export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/example/lib

  (3) 修改/etc/ld.so.conf文件,把庫(kù)所在的路徑加到文件末尾,并執(zhí)行l(wèi)dconfig刷新。這樣,加入的目錄下的所有庫(kù)文件都可見(jiàn)。

  當(dāng)靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)同名時(shí), gcc命令將優(yōu)先使用動(dòng)態(tài)庫(kù)。

  函數(shù)庫(kù)分為靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)兩種。

  靜態(tài)庫(kù)在程序編譯時(shí)會(huì)被連接到目標(biāo)代碼中,程序運(yùn)行時(shí)將不再需要該靜態(tài)庫(kù)。

  動(dòng)態(tài)庫(kù)在程序編譯時(shí)并不會(huì)被連接到目標(biāo)代碼中,而是在程序運(yùn)行是才被載入,因此在程序運(yùn)行時(shí)還需要?jiǎng)討B(tài)庫(kù)存在。

  程序1: hello.h

  #ifndef HELLO_H

  #define HELLO_H

  void hello(const char *name);

  #endif //HELLO_H

  程序2: hello.c

  #include

  void hello(const char *name)

  {

  printf("Hello %s!\n", name);

  }

  程序3: main.c

  #include "hello.h"

  int main()

  {

  hello("everyone");

  return 0;

  }

  無(wú)論動(dòng)態(tài)庫(kù)還是靜態(tài)庫(kù)都需要用到.o文件來(lái)生成,先編譯生成.o文件。

  # gcc -c hello.c

  1:創(chuàng)建靜態(tài)庫(kù)

  靜態(tài)庫(kù)文件名的命名規(guī)范是以lib為前綴,緊接著跟靜態(tài)庫(kù)名,擴(kuò)展名為.a。例如:我們將創(chuàng)建的靜態(tài)庫(kù)名為myhello,則靜態(tài)庫(kù)文件名就是libmyhello.a。

  # ar cr libmyhello.a hello.o

  使用靜態(tài)庫(kù):只需要在你的源程序中加入包含你所需要使用到的函數(shù)的聲明(即包含頭文件),然后在gcc生成目標(biāo)文件時(shí)候指明靜態(tài)庫(kù)就OK了(除非你包含的頭文件在/usr/include,庫(kù)文件在標(biāo)準(zhǔn)庫(kù)/usr/lib,/lib下,否則你得顯示指明他們的路徑)

  # gcc -o hello main.c -L. -lmyhello

  # ./hello

  Hello everyone!

  刪除靜態(tài)庫(kù)文件運(yùn)行./hello,程序正常運(yùn)行,說(shuō)明靜態(tài)庫(kù)公用函數(shù)已經(jīng)鏈接到目標(biāo)文件。

  2: 利用.o文件創(chuàng)建動(dòng)態(tài)庫(kù)

  動(dòng)態(tài)庫(kù)文件擴(kuò)展名為.so。

  # gcc -shared -fPCI -o libmyhello.so hello.o

  動(dòng)態(tài)庫(kù)的使用與靜態(tài)庫(kù)使用方式一樣

  # gcc -o hello main.c -L. -lmyhello

  # ./hello

  ./hello: error while loading shared libraries: libmyhello.so: cannot open shared object file: No such file or directory

  哦!出錯(cuò)了。快看看錯(cuò)誤提示,原來(lái)是找不到動(dòng)態(tài)庫(kù)文件libmyhello.so。程序在運(yùn)行時(shí),會(huì)在/usr/lib和/lib等目錄中查找需要的動(dòng)態(tài)庫(kù)文件。若找到,則載入動(dòng)態(tài)庫(kù),否則將提示類(lèi)似上述錯(cuò)誤而終止程序運(yùn)行。

  如何找到生成的動(dòng)態(tài)庫(kù)有3種方式:

  1)把庫(kù)拷貝到/usr/lib和/lib目錄下。

  (2)在LD_LIBRARY_PATH環(huán)境變量中加上庫(kù)所在路徑。

  例如動(dòng)態(tài)庫(kù)libhello.so在/home/example/lib目錄下:

  $export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/example/lib

  (3) 修改/etc/ld.so.conf文件,把庫(kù)所在的路徑加到文件末尾,并執(zhí)行l(wèi)dconfig刷新。這樣,加入的目錄下的所有庫(kù)文件都可見(jiàn)。

  當(dāng)靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)同名時(shí), gcc命令將優(yōu)先使用動(dòng)態(tài)庫(kù)。

    關(guān)鍵字:靜態(tài)庫(kù)、動(dòng)態(tài)庫(kù)、gcc

分享到:

頂部 】 【 關(guān)閉
版權(quán)所有:佛山思海電腦網(wǎng)絡(luò)有限公司 ©1998-2024 All Rights Reserved.
聯(lián)系電話(huà):(0757)22630313、22633833
中華人民共和國(guó)增值電信業(yè)務(wù)經(jīng)營(yíng)許可證: 粵B1.B2-20030321 備案號(hào):粵B2-20030321-1
網(wǎng)站公安備案編號(hào):44060602000007 交互式欄目專(zhuān)項(xiàng)備案編號(hào):200303DD003  
察察 工商 網(wǎng)安 舉報(bào)有獎(jiǎng)  警警  手機(jī)打開(kāi)網(wǎng)站