新聞中心
如何在Linux中使用動態(tài)庫并設置當前路徑

我們提供的服務有:成都做網(wǎng)站、網(wǎng)站建設、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、斗門ssl等。為近1000家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術(shù)的斗門網(wǎng)站制作公司
在Linux下使用動態(tài)庫可以大大節(jié)省內(nèi)存空間,提高程序的執(zhí)行效率。動態(tài)庫又稱共享庫,在程序運行時才會被載入內(nèi)存,與之相對的是靜態(tài)庫,它們在編譯階段就會被鏈接到程序中。本文將介紹如何在Linux中使用動態(tài)庫,并設置當前路徑。
一、動態(tài)庫的介紹
動態(tài)庫由多個模塊組成,每個模塊都是一個獨立的二進制文件,它們可以相互依賴。在程序運行時,只有當需要使用某個模塊時才會加載這個模塊。這使得動態(tài)庫比靜態(tài)庫更為靈活,在程序中經(jīng)常被使用。
動態(tài)庫的文件格式一般為.so,Linux中的庫文件都安裝在默認的系統(tǒng)路徑下,如/usr/lib、/lib等,程序在編譯時會自動鏈接到這些庫文件。
二、使用動態(tài)庫
在程序中使用動態(tài)庫需要使用到動態(tài)鏈接庫(ld)。在編譯時,需要使用-l選項指定動態(tài)庫的名字,編譯器會在默認的庫路徑下查找這個庫,并鏈接到程序中。
例如:
gcc -o myapp myapp.c -lm
其中,-lm表示鏈接到數(shù)學庫(libm.so)。
如果動態(tài)庫不在默認的庫路徑下,可以使用-L選項指定動態(tài)庫的搜索路徑。
例如:
gcc -o myapp myapp.c -L /usr/local/lib/ -lmylib
其中,-L /usr/local/lib/指定了動態(tài)庫的搜索路徑,-lmylib表示鏈接到名為libmylib.so的動態(tài)庫。
三、設置當前路徑
在程序中使用動態(tài)庫時,程序會在默認的搜索路徑中查找動態(tài)庫,如果沒有找到,那么程序就無法執(zhí)行。為了避免這種情況的發(fā)生,可以將程序需要使用的動態(tài)庫放在程序的當前路徑下。
在Linux中,可以使用LD_LIBRARY_PATH環(huán)境變量來設置程序的當前路徑。
例如:
export LD_LIBRARY_PATH=/home/user/mylibs/:$LD_LIBRARY_PATH
其中,/home/user/mylibs/是自定義的當前路徑,$LD_LIBRARY_PATH是保留的環(huán)境變量,表示將當前路徑添加到默認的搜索路徑之前。
四、
本文介紹了在Linux中使用動態(tài)庫及設置當前路徑的方法。動態(tài)庫可以提高程序的執(zhí)行效率,使程序更靈活。設置當前路徑可以保證程序能夠正確地搜索到動態(tài)庫,避免出現(xiàn)鏈接錯誤的問題。需要注意的是,動態(tài)庫的使用需要在編譯時指定庫的名字,同時也需要將庫文件放在正確的位置,才能夠被程序正確加載。
相關(guān)問題拓展閱讀:
- linux編譯的c++程序位置
linux編譯的c++程序位置
linux系統(tǒng)編譯C++程序時頭?件和庫?件搜索路徑
C++編譯時,教科書中寫道:#include “headfile.h”優(yōu)先在當前?錄查找頭?件;#include 從系統(tǒng)默認路徑查找頭?件。先
前以為系統(tǒng)默認路徑是環(huán)境變量$PATH指定的路徑,在系統(tǒng)上?查,傻了眼:
-bash-3.2$ echo$PATH
/usr/local/bin:/bin:/usr/bin:/in:/usr/in:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp
全是bin?錄,$PATH是運?可執(zhí)??件時的搜索路徑,與include頭?件的搜索路徑?關(guān),可能不少?犯了我這樣的錯誤。
頭?件:
1. #include“headfile.h”
搜索順序為:
①先搜索當前?錄
②然后搜索-I指定的?錄
③再搜索gcc的環(huán)境變量CPLUS_INCLUDE_PATH(C程序使?的是C_INCLUDE_PATH)
④最后搜索gcc的內(nèi)定?錄
/usr/include
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include
各?錄存在相同?件時,先找到哪個使?哪個。
2. #include
①先搜索-I指定的?錄
②然后搜索gcc的環(huán)境變量CPLUS_INCLUDE_PATH
③最后搜索gcc的內(nèi)定?錄
/usr/include
/usr/local/include
/usr/lib/gcc/x86_64-redhat-linux/4.1.1/include
與上?的相同,各?錄存在相同?件時,先找到哪個使?哪個。這?要注意,#include?式不會搜索當前?錄!
這?要說下include的內(nèi)定?錄,它不是由$PATH環(huán)境變量指定的,?是由g++的配置prefix指定的(知道它在安裝g++時可以指定,不知安
裝后如何修改的,可能是修改配置?件,需要時再研究下):
-bash-3.2$ g++ -v
Using built-inspecs.
Target:x86_64-redhat-linux
Configured with:../configure –prefix=/usr –mandir=/usr/share/man–infodir=/usr/share/info –enable-shared –enable-threads=posix–enable-checking=release –with-system-zlib –enable-__cxa_atexit–disable-libunwind-exceptions –enable-libgcj-multifile–enable-languages=c,c++,objc,obj-c++,java,fortran,ada–enable-java-awt=gtk –disable-dssi –enable-plugin–with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre–with-cpu=generic –host=x86_64-redhat-linux
Thread model:posix
gcc version 4.1.(Red Hat 4.1.2-46)
在安裝g++時,指定了prefix,那么內(nèi)定搜索?錄就是:
Prefix/include
Prefix/local/include
Prefix/lib/gcc/–host/–version/include
編譯時可以通過-nostdinc++選項屏蔽對內(nèi)定?錄搜索頭?件。
庫?件:
編譯的時候:
①gcc會去找-L
②再找gcc的環(huán)境變量LIBRARY_PATH
③再找內(nèi)定?錄/lib /usr/lib/usr/local/lib 這是當初compilegcc時寫在程序內(nèi)的(不可配置的?)
運?時動態(tài)庫的搜索路徑:
動態(tài)庫的搜索路徑搜索的先后順序是:
①編譯?標代碼時指定的動態(tài)庫搜索路徑(這是通過gcc 的參數(shù)”-Wl,-rpath,”指定。當指定多個動態(tài)庫搜索路徑時,路徑之間?冒號”:”分隔)
②環(huán)境變量LD_LIBRARY_PATH指定的動態(tài)庫搜索路徑(當通過該環(huán)境變量指定多個動態(tài)庫搜索路徑時,路徑之間?冒號”:”分隔)
③配置?件/etc/ld.so.conf中指定的動態(tài)庫搜索路徑;
④默認的動態(tài)庫搜索路徑/lib;
⑤默認的動態(tài)庫搜索路徑/usr/lib。
(應注意動態(tài)庫搜尋路徑并不包括當前?件夾,所以當即使可執(zhí)??件和其所需的so?件在同??件夾,也會出現(xiàn)找不到so的問題,類同#include不搜索當前?錄)
¥
百度文庫VIP限時優(yōu)惠現(xiàn)在開通,立享6億+VIP內(nèi)容
立即獲取
linux系統(tǒng)編譯C++程序時頭文件和庫文件搜索路徑
linux系統(tǒng)編譯C++程序時頭?件和庫?件搜索路徑
C++編譯時,教科書中寫道:#include “headfile.h”優(yōu)先在當前?錄查找頭?件;#include 從系統(tǒng)默認路徑查找頭?件。先
前以為系統(tǒng)默認路徑是環(huán)境變量$PATH指定的路徑,在系統(tǒng)上?查,傻了眼:
-bash-3.2$ echo$PATH
/usr/local/bin:/bin:/usr/bin:/in:/usr/in:/usr/X11R6/bin:/usr/java/j2re1.4.0/bin:/usr/atria/bin:/ccase/bin:/home/devcomp
第 1 頁
全是bin?錄,$PATH是運?可執(zhí)??件時的搜索路徑,與include頭?件的搜索路徑?關(guān),可能不少?犯了我這樣的錯誤。
頭?件:
1. #include“headfile.h”
搜索順序為:
①先搜索當前?錄
②然后搜索-I指定的?錄
③再搜索gcc的環(huán)境變量CPLUS_INCLUDE_PATH(C程序使?的是C_INCLUDE_PATH)
展開全文
?
限免
導長圖
轉(zhuǎn)存到網(wǎng)盤
發(fā)送至微信
下載文檔
北京百度網(wǎng)訊科技有限公司 版本號8.0.70
關(guān)于linux 動態(tài)庫 當前路徑的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站推廣找創(chuàng)新互聯(lián),老牌網(wǎng)站營銷公司
成都網(wǎng)站建設公司創(chuàng)新互聯(lián)(www.cdcxhl.com)專注高端網(wǎng)站建設,網(wǎng)頁設計制作,網(wǎng)站維護,網(wǎng)絡營銷,SEO優(yōu)化推廣,快速提升企業(yè)網(wǎng)站排名等一站式服務。IDC基礎服務:云服務器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗、服務器租用、服務器托管提供四川、成都、綿陽、雅安、重慶、貴州、昆明、鄭州、湖北十堰機房互聯(lián)網(wǎng)數(shù)據(jù)中心業(yè)務。
新聞標題:「如何在Linux中使用動態(tài)庫并設置當前路徑」 (linux 動態(tài)庫 當前路徑)
分享地址:http://m.fisionsoft.com.cn/article/dhjdooi.html


咨詢
建站咨詢
