快速入門例子
g++ –c a.cpp 編譯檔案,生成目標檔案 a.o
g++ a.o –o abc 連線 並重命名為可執行檔案 abc
(g++ -c a.cpp -o a 之後 g++ a 會儲存的,親驗)
g++ a.cpp 編譯連線一起,生成a.out
g++ a.cpp –o hello 生成a.out並命名為hello
涉及靜態動態庫的後面說
詳細說明
-c:
編譯或彙編原始檔
,但不作連線.
編譯器輸出對應於原始檔的目標檔案.
預設情況下
, g++
通過用.o替換源檔名字尾產生目標檔名
.可以使用
-o選項選擇其他名字
樣例:g++ -c a.cpp
輸出檔案
a.o
g++ -c a.cpp -o a 輸出檔案 a
-o ***:
指定輸出檔案為
***.
該選項不在乎
g++產生什麼輸出
,無論是可執行檔案
,目標檔案
,彙編檔案還是預處理後的c**
. 如果沒有使用
-o選項
, 預設的輸出結果是:
1. 可執行檔案為
a.out
2. source.suffix
的目標檔案是
source.o
3. 彙編檔案是
source.s
4. 而預處理後的
c源**送往標準輸出.
樣例:g++ -c a.cpp -o a 輸出檔案 a
-wall (同-w)–
輸出所有編譯警告資訊,
建議一定要加上
g++ a.cpp -w
比如在main中輸出乙個沒有初始化的變數
a.cpp: in function 『int main()』:
a.cpp:7:13: warning: 『a』 is used uninitialized in this function [-wuninitialized]
std::cout<
-
d
***=***
定義巨集,類似於
#define的功能
樣例:
g++ a.cpp -db=10
#define b 10
-l ***
在庫檔案的搜尋路徑列表中新增
dir 目錄.
,可新增多個
gcc -o hello2 m.cpp
-l ./1 -l . -lmyhello2 -wl,--rpath=./1
-llibrar
ytest
(小寫的l)
1. 2.聯結器在標準搜尋目錄中尋找這個庫檔案,庫檔案的真正名字是
libl
ibrar
ytest
(動態庫
)lib
l
ibrar
ytest
(靜態庫)
3.是按嚴格檔名搜尋 ,如果
so檔名帶版本號,需要建立軟連線
4.編譯時搜尋目錄包括 :
1. 使用者以
`-l'
選項指定的路徑
2.library_path ( 是環境變數用於在
程式編譯期間
查詢動態鏈結庫時指定查詢共享庫的路徑)
3.系統目錄
/lib/
usr/lib
5.執行時搜尋目錄包括 :
1.ld_library_path(用於在
程式載入執行期間
查詢動態鏈結庫時指定除了系統預設路徑之外的其他路徑)
2.ld.so.cache
&/etc/
ld.so.conf
3.系統目錄
/lib/
usr/lib
6.動態庫和靜態庫同名時,優先使用動態庫
-idir
( 大寫的i)
在標頭檔案的搜尋路徑列表中新增
dir 目錄.
-shared
生成乙個共享庫檔案
g++-shared
-olibtest.so
bdb.o
-fpic
編譯器生成位置無關目標碼,適用於動態連線
(dynamic linking)
g 編譯總結
一 編譯注意細節 1.使用g 編譯cpp檔案如果用gcc編譯c 原始檔時,加以下選項 lstdc 否則使用了c 操作的檔案編譯會出錯。2.gcc g 在執行編譯時,需要4步 預處理,生成.i的檔案 使用 e引數 將預處理後的檔案不轉換成組合語言,生成檔案.s 使用 s引數 有彙編變為目標 機器 生成...
g 編譯連線命令簡介
gcc g 現在是gnu中最主要和最流行的c c 編譯器 g 是c 的命令,以.cpp為主,對於c語言字尾名一般為.c。這時候命令換做gcc即可。其實是無關緊要的。其實編譯器是根據gcc還是g 來確定是按照c標準還是c 標準編譯鏈結。下面以test.cpp為例 命令 g test.cpp 功能 生成...
C 學習筆記 一 g 編譯
程式 g 是將 gcc 預設語言設為 c 的乙個特殊的版本,鏈結時它自動使用 c 標準庫而不用 c 標準庫。通過遵循原始碼的命名規範並指定對應庫的名字,用 gcc 來編譯鏈結 c 程式是可行的,如下 gcc main.cpp lstdc o maing helloworld.cpp由於命令列中未指定...