閱讀52 返回首頁    go 小米 go 小米6


g++基本用法

用法:g++[選項]文件...
  1. g++編譯流程:

    

  1. main.cxx  
  2. #include <iostream>   
  3.   
  4. using namespace std;  
  5.   
  6. int main(void)  
  7. {  
  8.         cout<<"Hello World!"<<endl;  
  9.         return 0;  
  10. }  
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)。


2g++關鍵參數介紹

上文在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:致命錯誤:iostreamNosuch 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

  上一篇:go Java程序員也應該知道的係統知識係列之網卡
  下一篇:go hi3531 SDK 編譯 kernel, 修改 參數 .