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

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


咨詢
建站咨詢
