1. ld_library_path
linux的環境變數,用於指明除預設路徑外的查詢共享庫(so,動態鏈結庫)的路徑。該路徑在預設路徑前查詢。
export ld_library_path=$ice_home/lib:.:$home/lib
當執行目標程式報如下錯誤時,就可以考慮使用ld_library_path指出共享庫的路徑
error while loading shared libraries: libjwsmtp-1.32.so: cannot open shared object file: no such file or directory
可以在編譯前
export ld_library_path=/data/home/jwsmtp/lib:$ld_library_path:
2.cplus_include_path
cplus_include_path=/usr/local/xce/include/mysql++:$home/zeromq/include:/usr/include/mysql
export cplus_include_path
指出g++的標頭檔案路徑
3.library_path
export library_path=$home/zeromq/lib:/usr/local/xce/lib
指出g++靜態庫路徑
補:1. 靜態函式庫:名字一般是lib***.a,利用靜態函式庫編譯成的檔案比較大,因為整個 函式庫的所有資料都會被整合進目標**中,他的優點就顯而易見了,即編譯後的執行程式不需要外部的函式庫支援,因為所有使用的函式都已經被編譯進去了。當然這也會成為他的缺點,因為如果靜態函式庫改變了,那麼你的程式必須重新編譯。
2. 動態函式庫:名字一般是lib***.so,相對於靜態函式庫,動態函式庫在編譯的時候 並沒有被編譯進目標**中,你的程式執行到相關函式時才呼叫該函式庫裡的相應函式,因此動態函式庫所產生的可執行檔案比較小。由於函式庫沒有被整合進你的程式,而是程式執行時動態的申請並呼叫,所以程式的執行環境中必須提供相應的庫。動態函式庫的改變並不影響你的程式,所以動態函式庫的公升級比較方便。
3.庫依賴檢視:
ldd [-vdr] [filename]
4. g++(gcc)的常用編譯變數
標頭檔案的搜尋路徑(#include的.h):
-i dir
鏈結(link)時,指出所需的外部庫(如jwsmpt.a)
-l library
指出l特定library時的搜尋路徑:
-l dir
使用例項:
g++ test.cpp -o test -i/data/home/jwsmtp/include/jwsmtp-1.32/ -l/data/home/jwsmtp/lib -ljwsmtp
c預編譯 define相關
是生成字串 define a x x a bc bc 是連線 define a x abc x a 123 abc123 error是生成編譯錯誤訊息 ifdef abc error something wrong.endif 如果abc是已經定義的巨集,那麼編譯的時候就會顯示錯誤訊息somethi...
交叉編譯相關
clfs2.0原理分析 看來沒什麼特別需要說明的,非交叉編譯用的引數基本上和lfs沒什麼太大區別,反正最重要的就是這個 with sysroot,好了,三次 with sysroot都出現了,雖然前面對這個引數也說明了一下,但不夠詳細,下面我就來說說對這個關鍵引數的理解 我們在做lfs的過程中了解到...
c語言中條件編譯相關的預編譯指令
條件編譯是根據實際定義巨集 某類條件 進行 靜態編譯的手段。可根據表示式的值或某個特定巨集是否被定義來確定編譯條件。最常見的條件編譯是防止重複包含標頭檔案的巨集,形式跟下面 類似 1 ifndef abcd h 2 define abcd h34 some declaration codes56 e...