linux下編譯C++程式
一、GCC(GNU Compiler Collection)是Linux下最主要的編譯工具,GCC不僅功能非常強大,結構也異常靈活。它可以通過不同的前端模組來支援各種語言,如Java、Fortran、Pascal、Modula-3和Ada
g++是GCC中的一個工具,專門來編譯C++語言的。
GCC的引數有:( 也是分步實現)
-E 讓GCC在預處理結束後停止編譯 g++ -E hello.cpp -o hello.i
-c 將hello.i編譯成目的碼 g++ -c hello.i -o hello.o
將目標檔案連線成可執行檔案 g++ hell.o -o hello
可以一步實現 g++ hello.cpp -o hello
二、假如有兩個以上原始檔應該一下編譯。
一步就實現 g++ foo1.cpp foo2.cpp -o foo
也可以分步實現 g++ -c foo1.cpp -o foo1.o
g++ -c foo2.cpp -o foo2.o
g++ foo1.o foo2.o -o foo
三、GCC一些常用選項
1、產生警告資訊的選項大多數以-W開頭 其中有-Wall
g++ -Wall hello.cpp -o hello
2、將所有的警告當成錯誤的選項-Werror
g++ -Werror hello.cpp -o hello
3、尋找標頭檔案選項 -I (linux預設路徑:標頭檔案在/usr/include/下),不在這個路徑下就要用-I指定。
gcc foo.cpp -I/home/include -o foo
4、 庫依賴選項 -L (linux預設路徑:庫檔案在/usr/lib/下),不在這個路徑下就要用-L指定。
g++ foo.cpp -L/home/lib -lfoo -o foo
庫就是將原始檔編譯之後生成的目標檔案的集合。
庫命名以lib開頭。
庫有靜態庫(通常以.a結尾)和動態庫(通常以.so結尾)
預設情況下,g++以動態庫形式連線。如果要靜態庫連線則要用-static指定(g++ foo.cpp -L/home/lib -static -lfoo -o foo)
5、優化選項 -On (n取0到3之間)
四、介紹一些GNU 二進位制鏈工具
1、ar命令(也稱為工具) 可以用來編譯成靜態庫
ar [-] {操作選項} {任選項} [成員名] [count] archive files….
ar r v libtest.a hello.o hello1.o 生成一個庫名為test,該庫中存放了hello.o和hello1.o這兩個模組。
操作項:d (刪除)、 m(移動)、p(標準輸出)、q(快速追加)、r(在庫中插入模組)、t(顯示庫的模組清單)、x(從庫中提取一個成員)。
任選項:a(成員後面新增一個新檔案)、b(成員前面新增一個新檔案)、c(建立一個庫)、f(截短指定名字)、v(顯示執行操作選項的附加資訊)。
2、編譯成動態庫
分步完成: gcc -fPIC -c func.cpp -o func.o
gcc -shared -o libfunc.so func.o
一步就完成:gcc -fPIC -shared -o libfunc.so func.cpp