亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標題: gcc使用動態(tài)庫時直接加到輸入文件里和通過-llibrary加入的有什么區(qū)別? [打印本頁]

作者: yecheng_110    時間: 2013-10-08 14:13
標題: gcc使用動態(tài)庫時直接加到輸入文件里和通過-llibrary加入的有什么區(qū)別?
本帖最后由 yecheng_110 于 2013-10-08 15:41 編輯

通過ldd查看一個是直接列出來這個庫的絕對路徑,一個是有一個=>指出找到的位置。
gcc -o test test.c /DIR/libmd5.so
gcc -o test test.c -L/DIR -lmd5
作者: kdkgod    時間: 2013-10-08 15:51
一個是相對路徑, 一個是絕對路徑。用相對路徑的時候要指定路徑,僅此而已! -lmd5的意思就是去/DIR里查找libmd5.so
作者: yecheng_110    時間: 2013-10-09 07:50
本帖最后由 yecheng_110 于 2013-10-09 07:51 編輯

gcc可以識別命令行參數(shù)中的文件是objectfile,動態(tài)庫還是靜態(tài)庫哈?這個和-rpath指定的絕對路徑有什么區(qū)別?
作者: myworkstation    時間: 2013-10-09 12:08
回復(fù) 3# yecheng_110


    rpath指定的是運行時搜索路徑。庫的搜索路徑在其實分為兩個環(huán)境,一個鏈接生成程序時用到的路徑,一個是程序運行時需要的路徑。ELF程序在生成時如果有用到動態(tài)庫那么會在program header中生成.interp section,這個section就是用于指定interpreter的。interpreter的功能很多,而分析動態(tài)庫符號及其依賴進而加載和重定位相應(yīng)對象是其功能最重要一環(huán)。interpreter也叫作Runtime Linker。在鏈接生成程序時會鏈接器會根據(jù)“默認搜索路徑”和指定的參數(shù)路徑來定位庫文件。而當程序運行時interpreter會根據(jù)“默認搜索路徑”和rpath指定的路徑來定位庫文件。“默認搜索路徑”在32位系統(tǒng)下是/lib,/usr/lib,在64位下是/lib64,/usr/lib64,可以通過修改/etc/ld.conf來指定額外的目錄到“默認搜索路徑”中,可見“默認搜索路徑”既在鏈接生成階段起作用也在運行時起作用。LD_LIBRARY_PATH也可以指定搜索路徑,它在鏈接生成時和運行時都起作用?梢酝ㄟ^在LD_LIBRARY_PATH指定路徑覆蓋“默認搜索路徑”中的庫文件。因為程序在啟動時會先使用LD_LIBRARY_PATH。
作者: yecheng_110    時間: 2013-10-09 18:50
myworkstation 發(fā)表于 2013-10-09 12:08
回復(fù) 3# yecheng_110

多謝,再請教一下和直接寫文件的不同是什么?
作者: myworkstation    時間: 2013-10-10 10:28
回復(fù) 5# yecheng_110


    直接寫絕對路徑的話在鏈接生成程序時使用指定的文件,在運行程序時也會從相應(yīng)的位置加載文件,如果你的程序發(fā)布的別的機器上而庫文件沒有在相應(yīng)的目錄下的話是無法運行程序的。




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2