新聞中心
Linux是一種自由和開(kāi)放源代碼的操作系統(tǒng),其內(nèi)核是由極富遠(yuǎn)見(jiàn)的Linux之父Linus Torvalds開(kāi)發(fā)的。Linux的普及使得它成為了服務(wù)器和嵌入式設(shè)備的首選系統(tǒng)。而Linux系統(tǒng)強(qiáng)大的可擴(kuò)展性也為開(kāi)發(fā)者提供了很多方便之處。其中,使用動(dòng)態(tài)連接庫(kù)和共享變量是Linux開(kāi)發(fā)中重要的部分。

成都創(chuàng)新互聯(lián)公司是一家專注于成都網(wǎng)站建設(shè)、做網(wǎng)站與策劃設(shè)計(jì),臨桂網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:臨桂等地區(qū)。臨桂做網(wǎng)站價(jià)格咨詢:18982081108
一、動(dòng)態(tài)連接庫(kù)
動(dòng)態(tài)連接庫(kù)也叫共享庫(kù),它是一種在程序運(yùn)行時(shí)被加載和鏈接的庫(kù),它可以和多個(gè)程序共享,有助于減小程序體積和重復(fù)代碼。Linux下的動(dòng)態(tài)連接庫(kù)有兩種后綴名:*.so和*.dynlib,其中*.so是Linux下最為常見(jiàn)的庫(kù)類型。
Linux系統(tǒng)下的動(dòng)態(tài)連接庫(kù)使用與靜態(tài)連接庫(kù)相似。動(dòng)態(tài)連接庫(kù)包含在一個(gè)為庫(kù)文件創(chuàng)建的目錄下,可以使用“l(fā)dd”命令來(lái)鏈接到一個(gè)應(yīng)用程序,在鏈接時(shí)指定庫(kù)路徑或設(shè)置環(huán)境變量“LD_LIBRARY_PATH”即可。具體的可以參考以下三個(gè)步驟:
1.編譯時(shí)加-l參數(shù)指定庫(kù)
$ gcc -o app app.c -l library
2.設(shè)置庫(kù)路徑
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/lib
3.使用ldd檢查庫(kù)的鏈接狀態(tài)
$ ldd app
二、共享變量
共享變量也叫共享內(nèi)存,是許多進(jìn)程可以訪問(wèn)和編輯的一塊內(nèi)存區(qū)域。共享內(nèi)存區(qū)域存在于特定的內(nèi)存地址空間中,每個(gè)進(jìn)程都可以通過(guò)使用mmap()系統(tǒng)調(diào)用映射共享內(nèi)存,以此來(lái)訪問(wèn)共享內(nèi)存中的數(shù)據(jù)。當(dāng)一個(gè)進(jìn)程對(duì)內(nèi)存進(jìn)行了修改,所有其他訪問(wèn)同一共享內(nèi)存的進(jìn)程將會(huì)看到這些修改。這項(xiàng)技術(shù)常常用于進(jìn)程間通信、數(shù)據(jù)共享以及提高程序的性能。
使用共享變量時(shí),可以在一個(gè)進(jìn)程創(chuàng)建共享內(nèi)存,然后將該內(nèi)存區(qū)域映射至另一進(jìn)程的地址空間中,并讓這兩個(gè)進(jìn)程共享該內(nèi)存區(qū)域。在Linux系統(tǒng)下,使用共享變量可分為如下三個(gè)步驟:
1.按照POSIX標(biāo)準(zhǔn)的shm_open()函數(shù)創(chuàng)建共享內(nèi)存區(qū)域
int fd = shm_open(“shm_name”, O_CREAT | O_RDWR, 0666);
if(fd == -1){
perror(“shm_open”);
return -1;
}
2.使用mmap()函數(shù)將內(nèi)存映射到進(jìn)程地址空間
char* addr = (char*)mmap(NULL, region_size, PROT_READ | PROT_WRITE,
MAP_SHARED, fd, 0);
if (addr == MAP_FLED){
perror(“mmap”);
return -1;
}
3.對(duì)共享內(nèi)存變量進(jìn)行操作
char* buffer;
memcpy(buffer, addr, strlen(addr));
本文對(duì)進(jìn)行了簡(jiǎn)單介紹,可以在某些特殊的場(chǎng)合下為L(zhǎng)inux開(kāi)發(fā)者提供方便。開(kāi)發(fā)人員可以利用這些技術(shù)來(lái)減小程序體積,優(yōu)化系統(tǒng)性能,實(shí)現(xiàn)多進(jìn)程之間的數(shù)據(jù)共享。希望本文能對(duì)大家有所幫助。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗(yàn)豐富以策略為先導(dǎo)10多年以來(lái)專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計(jì),響應(yīng)式網(wǎng)站制作,設(shè)計(jì)師量身打造品牌風(fēng)格,熱線:028-86922220matlab在linux下生成的動(dòng)態(tài)鏈接庫(kù)怎么用
動(dòng)態(tài)庫(kù)的生成
1>首先生成目標(biāo)文件,但是此時(shí)要加編譯器選項(xiàng)-fpic和鏈接器鬧嫌扮選項(xiàng)-shared,
gcc -fpic -c add.c
gcc -fpic -c sub.c
生成中間文件add.o和sub.o
2>其次生成動(dòng)態(tài)庫(kù)
gcc -shared –o libtiger.so add.o sub.o
生成動(dòng)態(tài)庫(kù)libtiger.so,libtiger.so就是我者梁們生成的目標(biāo)動(dòng)態(tài)庫(kù)。我們以后使用動(dòng)態(tài)庫(kù)和main.c程序生成可執(zhí)行程序
說(shuō)明:
以上兩部也可以合成一步搞定:
gcc -fpic -shared add.c sub.c -o libtiger.so
2.使用動(dòng)態(tài)鏈接庫(kù)
在編譯程序時(shí),使用動(dòng)態(tài)鏈接庫(kù)和靜態(tài)庫(kù)是一致的,使用”-l庫(kù)名”的方式,在生成可執(zhí)行文件的時(shí)候會(huì)鏈接庫(kù)文件。
1>使用命令:
gcc -o main main.c -L ./ -ltiger
2>-L指定動(dòng)態(tài)鏈接庫(kù)的路勁,-ldtiger鏈接庫(kù)函數(shù)tiger。-ltiger是動(dòng)態(tài)庫(kù)的調(diào)用規(guī)則。Linux系統(tǒng)下的動(dòng)態(tài)庫(kù)命名方式是lib*.so,而在鏈接時(shí)表示位-l*,*是自己命名的庫(kù)名。
3>但是程序會(huì)提示如下錯(cuò)誤
error while loading shared libraries: libtiger.so: cannot open shared object file: No such file or direct
這是因?yàn)槌绦蜻\(yùn)行時(shí)沒(méi)有找到動(dòng)態(tài)鏈接庫(kù)造成的。程序編譯時(shí)鏈接動(dòng)態(tài)庫(kù)和運(yùn)行時(shí)使用動(dòng)態(tài)鏈接庫(kù)的概念是不同的,在運(yùn)行時(shí),程序鏈接的動(dòng)態(tài)鏈接庫(kù)需要在系統(tǒng)目錄下才行。
4>使用以下方法可以解決此問(wèn)題
a. 在linux下最方便的解決方案是拷貝libtiger.so到絕對(duì)目錄 /lib 下液灶(但是,要是超級(jí)用戶才可以,因此要使用sudo哦,親)。就可以生成可執(zhí)行程序了
b.第二種方法是:將動(dòng)態(tài)鏈接庫(kù)的目錄放到程序搜索路徑中,可以將庫(kù)的路徑加到環(huán)境變量LD_LIBRARY_PATH中實(shí)現(xiàn):
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
linux怎樣添加永久動(dòng)態(tài)庫(kù)環(huán)境變量
/etc/ld.so.conf文件里增加動(dòng)態(tài)庫(kù)所在的路徑
或者/etc/ld.so.conf.d下新建.conf文件,內(nèi)容為加動(dòng)態(tài)庫(kù)所在的路徑
動(dòng)態(tài)連接庫(kù) linux 共享變量的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于動(dòng)態(tài)連接庫(kù) linux 共享變量,Linux下動(dòng)態(tài)連接庫(kù)與共享變量的使用,matlab在linux下生成的動(dòng)態(tài)鏈接庫(kù)怎么用,linux怎樣添加永久動(dòng)態(tài)庫(kù)環(huán)境變量的信息別忘了在本站進(jìn)行查找喔。
成都創(chuàng)新互聯(lián)科技公司主營(yíng):網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、小程序制作、成都軟件開(kāi)發(fā)、網(wǎng)頁(yè)設(shè)計(jì)、微信開(kāi)發(fā)、成都小程序開(kāi)發(fā)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)等業(yè)務(wù),是專業(yè)的成都做小程序公司、成都網(wǎng)站建設(shè)公司、成都做網(wǎng)站的公司。創(chuàng)新互聯(lián)公司集小程序制作創(chuàng)意,網(wǎng)站制作策劃,畫(huà)冊(cè)、網(wǎng)頁(yè)、VI設(shè)計(jì),網(wǎng)站、軟件、微信、小程序開(kāi)發(fā)于一體。
網(wǎng)頁(yè)題目:Linux下動(dòng)態(tài)連接庫(kù)與共享變量的使用(動(dòng)態(tài)連接庫(kù)linux共享變量)
文章分享:http://www.dlmjj.cn/article/djosioo.html


咨詢
建站咨詢
