gcc,g 編譯鏈結有關的路徑

2021-08-13 22:10:45 字數 932 閱讀 1186

在linux下編譯鏈結或執行c/c++程式時可能會遇到找不到標頭檔案,找不到庫檔案的錯誤,簡單總結一下這些錯誤的解決方法

1,找不到標頭檔案

解決方法一:在編譯時使用 -i 來指定標頭檔案的路徑,例如把頭檔案放在 /home/user/include/ 目錄下,則在編譯時加上 -i /home/user/include/ ,如有多個目錄,可多次使用-i來指定

解決方法二:將標頭檔案的路徑加入環境變數cpath中,如 export cpath=" /home/user/include/",也可以根據情況使用下面的三個環境變數:

c_include_path 編譯c程式時使用的環境變數,用於查詢標頭檔案。

cplus_include_path 編譯c++程式時使用的環境變數,用於查詢標頭檔案。

objc_include_path 編譯obj-c程式時使用的環境變數,用於查詢標頭檔案。

cpath 編譯c/c++/obj-c程式時使用的環境變數,用於查詢標頭檔案。

2,鏈結時找不到庫檔案

解決方法一:在鏈結時使用-l引數來指定庫的路徑,例如把某個自己製作的動態庫放在/home/user/lib/目錄下了,則鏈結程式時加上-l/home/user/lib/,同時可以使用-l來指定庫的名稱,如指定執行緒庫:-lpthread

解決方法二:把庫檔案放入系統的庫檔案目錄下,如/lib,/usr/lib等,作業系統執行該程式時會自動到這些目錄下找庫檔案

解決方法三:把庫檔案所在的目錄加入library_path環境變數中,如 export library_path=" /home/user/lib/"

3,執行時找不到動態庫

解決方法一:把庫檔案放入系統的庫檔案目錄下,如/lib,/usr/lib等

解決方法二:把庫檔案所在的目錄加入ld_library_path環境變數中,如 export ld_library_path=" /home/user/lib/"

C C 鏈結有關的問題

如果我們需要引用乙個外部庫裡面的變數或函式,要涉及到extern,具體該怎麼寫呢?下面是一小段例子函式 假設我們有2個原始檔hello.h和hello.cpp hello.h的 如下 ifdef cplusplus extern c endifhello.cpp的 如下 extern const c...

gcc g 編譯器切換版本 鏈結問題

cd gcc 6.4.0 contrib download prerequisites三 構建 mkdir build cd build configure enable checking release enable languages c,c disable multilib四 編譯 此步用時較...

可執行檔案中和動態鏈結有關的段section

內容是乙個字串,儲存了動態鏈結器的路徑,如 lib ld linux.so.2 有幾種檢視方式 objdump s a.out readelf l a.out grep interpreter 儲存了動態鏈結器所需的基本資訊,具體可以看elf.h檔案或lsb手冊 依賴於哪些共享物件 動態鏈結符號表....