g++基本用法
用法:g++[選項]文件...-
g++編譯流程:
- main.cxx
- #include <iostream>
- using namespace std;
- int main(void)
- {
- cout<<"Hello World!"<<endl;
- return 0;
- }
main.cxx #include <iostream> using namespace std; int main(void) { cout<<"Hello World!"<<endl; return 0; }
① g++ -E僅作預處理,不進行編譯、匯編和鏈接
如果你想查看某一個文件的預處理過程,可以
Administrator@72cec870236147e/home/liujl/mytest
$g++ -E main.cxx
這樣會直接在terminal中顯示預處理過程,如果main.cxx中包含include,例如#include<iostream>,隻能看到部分預處理結果;這個隻顯示預處理,不生成文件;如果你想查看詳細的預處理,可以重定向到一個文件中,如:
Administrator@72cec870236147e/home/liujl/mytest
$g++ -E main.cxx -o main.i
這樣你可以查看main.i中顯示的內容,裏麵會有類似:
#1 "/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/stringfwd.h"1 3
可以參考官方預處理輸出文檔:
https://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html
或者:
https://stackoverflow.com/questions/15679756/g-e-option-output
②g++ -s 編譯到匯編語言,不進行匯編和鏈接,即隻激活預處理和編譯,生成匯編語言
Administrator@72cec870236147e/home/liujl/mytest
$g++ -s main.i -o main.s
③g++ -c 編譯、匯編到目標代碼,不進行鏈接,即生成目標文件(.o)
Administrator@72cec870236147e/home/liujl/mytest
$g++ -c main.s -o main.o
會生成一個main.o的目標文件
④g++ -o 生成鏈接文件
Administrator@72cec870236147e/home/liujl/mytest
$g++ main.o printf1.o printf2.o -o main
(注意,如果各個文件有依賴關係,在生成鏈接文件之前步驟每個文件單獨操作都沒有問題,但是在鏈接的時候會考慮依賴關係,所以上麵語句把main中的依賴添加上麵了)
⑤./main 執行
這是最後一步了,執行-o後麵的文件,如果沒有-o,係統會默認生成一個a.out文件(執行./a.out)。
2、g++關鍵參數介紹
上文在g++編譯過程中已經介紹過-E、-S、-c、-o,再簡單介紹-x和-M
①-x <語言> 指定其後輸入文件的語言
允許的語言包括:cc++ assembler none
‘none’意味著恢複默認行為,即根據文件的擴展名猜測源文件的語言
Administrator@72cec870236147e/home/liujl/mytest
$g++ -x c main.cxx
main.cxx:1:20:致命錯誤:iostream:Nosuch file or directory
編譯中斷。
用c語言編譯main.cxx,由於main.cxx中有#include<iostream>,是c語言中沒有的,所以會報錯誤
Administrator@72cec870236147e/home/liujl/mytest
$g++ -x c++ main.cxx,編譯就沒問題。
②g++ -M main.cxx 生成文件關聯信息。包含目標文件所依賴的所有源代碼。
Administrator@72cec870236147e/home/liujl/mytest
$g++ -M main.cxx
main1.o:main1.cxx /usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/iostream \
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/i686-pc-cygwin/bits/c++config.h\
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/i686-pc-cygwin/bits/os_defines.h\
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/i686-pc-cygwin/bits/cpu_defines.h\
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/ostream \
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/ios \
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/iosfwd \
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/stringfwd.h \
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/bits/postypes.h \
/usr/lib/gcc/i686-pc-cygwin/4.5.3/include/c++/cwchar \
最後更新:2017-04-03 07:57:07