在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
RFID管理系統集成商 RFID中間件 條碼系統中間層 物聯網軟件集成