
gcc庫?件和頭?件搜索路徑
?、compile-time庫?件搜索路徑
1.如果編譯時指定了-L選項,就優先到-L指定的路徑去查找庫進?連接;
2.查找GCC的環境變量LIBRARY_PATH
3.到/bin /usr/lib /usr/local/lib去查找。這?個搜索路徑在gcc下是默認的。
所以當我們要讓??添加的庫?件讓gcc能搜索到,有兩種?法,?種就是?-L指定,?種就是將庫復制到以上?個gcc默認搜索路徑。
?、run-time庫搜索路徑
1.編譯時?-Wl, -rpath指定的路徑
Ex:
arm-none-linux-gnueabi-gcc -o helloword_arm helloword.c -Wl,-dynamic-linker=/system/lib/.3,-rpath,/system/lib/
2.環境變量LD_LIBRARY_PATH指定的路徑
3./etc/指定的路徑
4.默認的動態搜索庫路徑/lib /usr/lib
LIBRARY_PATH和LD_LIBRARY_PATH是Linux下的兩個環境變量,?者的含義和作?分別如下:
LIBRARY_PATH環境變量?于在程序編譯期間查找動態鏈接庫時指定查找共享庫的路徑,例如,指定gcc編譯需要?到的動態鏈接庫的?錄。設
置?法如下(其中,LIBDIR1和LIBDIR2為兩個庫?錄):
export LIBRARY_PATH=LIBDIR1:LIBDIR2:$LIBRARY_PATH
LD_LIBRARY_PATH環境變量?于在程序加載運?期間查找動態鏈接庫時指定除了系統默認路徑之外的其他路徑,注意,LD_LIBRARY_PATH
中指定的路徑會在系統默認路徑之前進?查找。設置?法如下(其中,LIBDIR1和LIBDIR2為兩個庫?錄):
export LD_LIBRARY_PATH=LIBDIR1:LIBDIR2:$LD_LIBRARY_PATH
舉個例?,我們開發?個程序,經常會需要使?某個或某些動態鏈接庫,為了保證程序的可移植性,可以先將這些編譯好的動態鏈接庫放在??指
定的?錄下,然后按照上述?式將這些?錄加?到LD_LIBRARY_PATH環境變量中,這樣??的程序就可以動態鏈接后加載庫?件運?了。
區別與使?:
開發時,設置LIBRARY_PATH,以便gcc能夠找到編譯時需要的動態鏈接庫。
發布時,設置LD_LIBRARY_PATH,以便程序加載運?時能夠?動找到需要的動態鏈接庫。
三、?個重要的命令
1)ldd bin_name
可以查看編譯出來的可執??件依賴的庫。部署程序時,我們要把這些庫拷貝出來,然后將這些庫連同可執??件拷貝到新的機器上,
在/etc/.d下添加對應的庫?件搜索路徑即可。
ig命令
搜索/lib和/usr/lib以及/etc/下列出來的所有路徑的庫,然后創建動態庫的cache?件。當程序需要搜索庫時就會搜索?列
出來的庫。
所以當我們向系統添加新的庫?件時,除了需要把庫?件烤到/usr/local/lib等指定位置外,還需ldconfig?下來更新cache?件。
四、gcc頭?件的搜索路徑
1.優先搜索-I指定的路徑
2.查找GCC的環境變量C_INCLUDE_PATH/CPLUS_INCLUDE_PATH/OBJC_INCLUDE_PATH指定的路徑
3.查找默認的搜索路徑/usr/include /usr/local/include
所有GCC的環境變量,我們都可以GCC的原有搜索路徑上上?添加進我們??的路徑,例如
#增加.so搜索路徑
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home//lib
#增加.a搜索路徑
LIBRARY_PATH=$LIBRARY_PATH:/home/lib
#增加bin搜索路徑
export PATH=$PATH:/home/bin
#增加GCC的include?件搜索路徑
export C_INCLUDE_PATH=$C_INCLUDE_PATH:/home/include
-wall -pedantic
-wall編譯時顯?所有的警告信息,可以增加程序的健壯性和可移植性
-pedantic,以符合ANSI/ISO C 標準列出所有警告

本文發布于:2023-05-28 06:51:47,感謝您對本站的認可!
本文鏈接:http://www.newhan.cn/zhishi/a/1685227909177943.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:gcc庫文件和頭文件搜索路徑.doc
本文 PDF 下載地址:gcc庫文件和頭文件搜索路徑.pdf
| 留言與評論(共有 0 條評論) |