g++基本用法

简介: <span style="font-size:14px">用法:</span><span style="font-family:Lucida Console,monospace"><span style="font-size:14px"><span>g++[</span></span></span><span style="font-size:14px">选项</span><span st
用法: 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. }  

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

可以参考官方预处理输出文档:

http://gcc.gnu.org/onlinedocs/cpp/Preprocessor-Output.html

或者

http://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 \

相关文章
|
11月前
LambdaQueryWrapper用法
LambdaQueryWrapper用法
149 0
|
测试技术 API
harfbuzz 的用法
HarfBuzz 整形 API 的核心是函数。此函数采用一种字体,即 包含一串 Unicode 代码点的缓冲区和 (可选)字体功能列表作为其输入。它取代了 缓冲区中的代码点,其中包含来自 字体,正确排序和定位,以及任何 应用的可选字体功能。hb_shape()
427 0
$.each()的用法
$.each()的用法
227 0
|
JavaScript 前端开发 C#
|
前端开发 JavaScript
|
JavaScript
this的四种用法
  js 中的this是比较难理解的。这里将介绍this的具体用法。主要是下面的四种方法:   1.作为对象的方法;   2.作为普通函数中;   3.作为构造函数调用;   4.作为Function.
821 0