gcc & g++是gnu中最主要和最流行的c & c++编译器 。
g++用来针对c++的处理命令,以.cpp为后缀,对于c语言后缀名一般为.c。这时候命令换做gcc即可。

下面以Test.cpp为例:

命令: g++ Test.cpp
功能:生成默认为a的可执行文件,这个过程已经包含了编译和链接过程。
再说下-o命令,-o命令表示输出的意思,gcc/g++命令是非常灵活的,你不指定输出的文件名的时候默认生成的是可执行文件。
你要输出Test的可执行程序的话可以用:g++ -o Test Test.cpp 或者g++ Test.cpp -o Test即可。

-o命令是输出的意思,这样就输出了名为Test的可执行程序。

1.预处理,生成.i的文件[预处理器cpp]

命令:g++ -E Test.cpp > Test.i

功能:输出预处理后 的文件,linux下以.i为后缀名。只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里 。这一步主要做了这些事情:宏的替换,还有注释的消除,还有找到相关的库文件。用编辑器打开Test.i会发现有很多很多代码,你只需要看最后部分就会发 现,预处理做了宏的替换,还有注释的消除,可以理解为无关代码的清除。下面是Test.i文件的最后部分,可以看见宏的替换和注释的消除。

2.将预处理后的文件不转换成汇编语言,生成文件.s[编译器egcs]

命令:g++ -S Test.cpp
功能:会生成Test.s文件,.s文件表示是汇编文件,用编辑器打开就都是汇编指令。

3.有汇编变为目标代码(机器代码)生成.o的文件[汇编器as]

命令:g++ -c Test.cpp 
功能:.o是GCC生成的目标文件,除非你是做编译器和连接器调试开发的,否则打开这种.o没有任何意义。二进制机器码一般人也读不了。

4.连接目标代码,生成可执行程序[链接器ld]

命令:g++ Test.o -L F:\vs2008\VC\include\iostream
功能:将.o文件与所需的库文件链接整合形成.exe文件,这就是可执行文件。-L 表示链接,这里我后面写的是绝对路径,相对各人电脑不同

在上面各个步骤中你可以用-o命令输出你自己想要的各种名字。比如最后一个命令,用下面的输出Test.exe
你可以g++ Test.o -o Test.exe -L F:\vs2008\VC\include\iostream

  1. 二、常用编译选项
  2.  
  3. -c:编译或汇编源文件,不做连接。
    G++ -c test.cpp输出test.o
  4.  
  5. -o file:制定输出文件为file
  6.  
  7. -Wall 输出所有编译警告(最好加上)
  8.  
  9. -Dmacro=XXX:定义宏。
  10.  
  11. -shared:生成一个共享库文件
    g++ -shared -o libtest.so test.o
  12.  
  13. -fPIC:生成位置无关目标代码,适用于动态连接。
  14.  
  15. -llibrarytest:连接名字为librarytest的库
    真正名字是liblibrarytest.so(a) so是动态库,a是静态库。
    严格按照文件名搜索,版本号要创建软连接。
    编译搜索目录:
    用户-L指定, LIBRARY_PATH,系统目录/lib /usr/lib
    运行搜索目录:
    LD_LIBRARY_PATHld.so.cache & /etc/ld.so.conf ,系统目录 /lib /usr/lib
    动态库和静态库同名,优先动态库。
  16.  
  17. -Ldir:添加库文件搜索路径 -Idirinclude):添加头文件搜索路径
  18.  
  19. -g:产生调试信息
  20.  
  21. -olevel:优化级别,一般用o2
  22.  
  23. 三、静态库、共享库
    静态库:一些.o文件打包,在被连接后成为程序的一部分。
    编译方法
    -g++ -c test.cpp
    -ar res libtest.a test.o
    链接方法:
    -g++ -Wall -o test testMain.cpp -ltest -L./
  24.  
  25. 共享库:链接的时候不会被复制到程序中。
    编译方法:
    g++ -c fPIC test.cpp
    //要动态 g++ -shared -WI, -soname, libtest.so, -o libtest.so.1.0.1 test.o
    mv libtest.so.1.0.1 /usr/lib
    sudo ldconfig & || ll /user/lib/libtest.so //创建一个软连接。
    链接方法:
    g++ -o test test.cpp ./libtest.so -ldx_cxx
  26.  
  27. 四、常用命令
    ldd:显示程序依赖的同台共享库。
    file:查看文件格式信息。
    ldconfig:在搜寻目录下搜索出可以共享的动态链接库

gcc/g++命令认识的更多相关文章

  1. gcc/g++ 命令的经常使用选项

    gcc/g++ 命令的经常使用选项格式(选项 解释) -o FILE 指定输出文件名称.在编译为目标代码时,这一选项不是必须的.假设FILE没有指定,缺省文件名称是a.out. -c 仅仅编译生成目标 ...

  2. gcc/g++ 命令的常用选项

    gcc/g++ 命令的常用选项使用g++编译CPP文件如果用gcc编译C++源文件时,加以下选项:-lstdc++,否则使用了C++操作的文件编译会出错.假如在程序中用到new delete操作,而不 ...

  3. gcc/g++ 命令

    gcc & g++现在是gnu中最主要和最流行的c & c++编译器 .g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可.其实是无关紧要的.其 ...

  4. gcc/g++命令参数笔记

    1. gcc -E source_file.c -E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_file.c -S,只执行到源代码到汇编代码的转换,输出汇编代码. 3. ...

  5. gcc/g++命令参数

    在windows环境下,我们运行一程序,只需要在VS中点击运行按键即可,VS帮我们做完了程序的预处理.编译.汇编.链接阶段 但是在linux环境下,我们只能借助gcc/g++完成这一系列的操作 -o参 ...

  6. GCC常用命令行一览表

    GCC常用命令行一览表 这些常用的 gcc/g++ 命令行参数,你都知道么?1. gcc -E source_file.c-E,只执行到预编译.直接输出预编译结果. 2. gcc -S source_ ...

  7. gcc/g++基本命令

    gcc & g++现在是gnu中最主要和最流行的c & c++编译器 .g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可.其实是无关紧要的.其 ...

  8. gcc/g++多版本切换 (ubuntu18.04)

    使用Ubuntu18.04已经有一段时间了,在使用过程中经常需要处理不同软件的编译工作,但是这时候就遇到这样一个问题,那就是不同软件,甚至是同一个软件的不同版本都会使用不同版本的gcc/g++来进行编 ...

  9. gcc/g++基本命令简介

    gcc & g++现在是gnu中最主要和最流行的c & c++编译器 .g++是c++的命令,以.cpp为主,对于c语言后缀名一般为.c.这时候命令换做gcc即可.其实是无关紧要的.其 ...

随机推荐

  1. 配置nginx如果获取不到图片 去另外一台服务器获取

    配置nginx服务器从一台服务器如果获取不到图片 从另外一台服务器中获取 location ^~ /uploads/ { root /data/weiwend/weiwang; try_files $ ...

  2. Karma-Jasmine之安装与实例详解(一)

    本文先介绍karma-jasmine的安装.接下来的(二)中主要通过实例利用断言库详解karma-jasmine如何进行单元测试. Karma介绍 首先说一下karma,官方是这样给出的,karma不 ...

  3. Win8控制面板快捷键

    Win8系统相比我们已经熟悉的Win7与XP系统有着一些特殊的变化,导致很多初次使用Win8系统的朋友感觉有点吃力,随着Win8系统即将于几天后正式发布,下面本文与大家分享大家比较关心的Win8控制面 ...

  4. 读书笔记-HBase in Action-第二部分Advanced concepts-(1)HBase table design

    本章以山寨版Twitter为例介绍HBase Schema设计模式.广义的HBase Schema设计不仅仅包含创建表时指定项,还应该综合考虑Column families/Column qualif ...

  5. ubuntu 14.04 chromium,firefox 怎样正确安装Adobe flash player

    一.firefox 正确安装Adobe flash player 有时候我们须要在Ubuntu下採用手动安装一些软件,比方Firefox的Flash插件.Adobe® Flash® Player 是一 ...

  6. 数位DP问题整理(一)

    第一题:Amount of degrees (ural 1057) 题目链接:http://acm.timus.ru/problem.aspx?space=1&num=1057 题意:[x,y ...

  7. LabVIEW系列——错误簇的传递

    从以下示例可以得出结论: 1.图一出现的三种错误,分别位于打开/创建/替换文件函数,写入文本文件函数,读取文件文件函数.说明三个函数都被运行了. 2.图二只出现了一种错误,位于打开/创建/替换文件函数 ...

  8. (转载)OSI七层参考模型和TCP/IP四层参考模型

    Mallory   网络模型概念浅析 网络模型一般是指OSI七层参考模型和TCP/IP四层参考模型. #只是一种设计==模型# Open System Interconnect的缩写,意为开放式系统互 ...

  9. 本地nginx多域名映射

    前言: 工作两年多了,一直感觉技术上没有太大的长进,好多东西感觉会但是给别人讲起来的时候又感觉和没学过一样.以后希望能坚持写博客,把看过的东西都一点一滴积累下来.言归正传,今天要说的是nginx与ho ...

  10. 如何让Windows程序只运行一个程序实例?

    要实现VC++或者MFC只运行一个程序实例,一般采用互斥量来实现,即首先用互斥量封装一个只运行一个程序实例的函数接口: HANDLE hMutex = NULL; void MainDlg::RunS ...