轉:GCC標頭檔和庫檔案搜尋路徑問題

來源:互聯網
上載者:User

原文:

http://blog.csdn.net/diantouxiao/article/details/5836345

參考資料:http://hi.baidu.com/relayon/blog/item/95aaf7fcf8e3edf5fc037f89.html

 

我們編寫程式的時候會用到三個東西:標頭檔,連結時候庫檔案,運行時動態庫檔案。對於上面3中,我認為標頭檔是預先處理過程的,應該和編譯器有關,而連結時候庫檔案當然是和連結器有關了,而動態庫檔案時和動態裝載器有關的。

製作程式時候:

標頭檔尋找路徑問題;

1.首先從-I開始,這個是我們在編譯的時候指定的

2.GCC環境變數C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH (這些變數在windows下對應的是include環境變數)

3.然後內定目錄:/usr/include /prefix/include等待(prefix是我們的安裝時候的目錄),我們可以GCC -print-search-dirs 查看

連結時候庫檔案尋找路徑問題;

1.首先也是尋找編譯時間指定的-L目錄,如果不是預設連結的庫檔案我們還要另外指定-l選項。

2.gcc的環境變數LIBRARY_PATH

3.再找內定目錄 /lib:/usr/lib: /usr/local/lib:它是製作編譯器的時候寫進編譯器搜尋路徑的。gcc -print-search-dirs 可以查看。

運行程式的時候:

當然現在我們的程式已經做好了,但是現在的程式大部分是使用動態庫,而動態庫有分為開始執行程式時候裝載庫和運行程式需要的時候才裝載的動態庫。我們這裡只講前者搜尋路徑問題。我們可能碰到過運行程式的時候出現報找不到動態庫的問題,LINUX下有,WINDOW下也有,這有可能就是程式需要的動態庫不存在,或則沒有放在指定的位置,所以找不到。

運行時動態庫的搜尋路徑;

1、在設定檔/etc/ld.so.conf中指定動態庫搜尋路徑

2、通過環境變數LD_LIBRARY_PATH指定動態庫搜尋路徑(當通過該環境變數指定多個動態庫搜尋路徑時,路徑之間用冒號":"分隔)(HP-UX對應的是SHLIB_PATH環境變數,AIX對應的是LIBPATH環境變數,windows對應的是lib環境變數)

3、在編譯目標代碼時指定該程式的動態庫搜尋路徑(還可以在編譯目標代碼時指定程式的動態庫搜尋路徑。這是通過gcc 的參數"-Wl,-rpath,"指定。當指定多個動態庫搜尋路徑時,路徑之間用冒號":"分隔

4、預設的動態庫搜尋路徑/lib /usr/lib

動態庫的搜尋路徑搜尋的先後順序是:

1.編譯目標代碼時指定的動態庫搜尋路徑;

2.環境變數LD_LIBRARY_PATH指定的動態庫搜尋路徑;

3.設定檔/etc/ld.so.conf中指定的動態庫搜尋路徑;

4.預設的動態庫搜尋路徑/lib /usr/lib。

分析到這裡你大概知道了相關的路徑搜尋了,那麼你現在要做的就是把編譯工具或運行工具需要的東西放在他們的搜尋路徑內就可以了,當然如果你考慮到執行效率的話,你還可以根據搜尋順序放在第一個搜尋路徑內等。(我們從路徑搜尋順序來看,也發現了一個原則即使用者至上的原則,即先從使用者指定的目錄尋找然後再找別的預設目錄。)不過這樣比較麻煩,例如我們動態運行程式的時候一般就是修改一下LD_LIABRARY_PATH或則編譯連結程式的時候-I -L選項。

其它同內容文章:http://jianlee.ylinux.org/Computer/C%E5%92%8CGNU%E5%BC%80%E5%8F%91/gcc.html#sec1

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.