c 編譯相關

2021-06-11 16:07:59 字數 1787 閱讀 4823

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...