• g++编译总结


    g++编译总结

    一、编译注意细节

    1.使用g++编译CPP文件如果用gcc编译C++源文件时,加以下选项:-lstdc++,否则使用了C++操作的文件编译会出错。

    2.gcc/g++ 在执行编译时,需要4步

    ①   预处理,生成.i的文件[使用-E参数]

    ②   将预处理后的文件不转换成汇编语言,生成文件.s[使用-S参数]

    ③   有汇编变为目标代码(机器代码)生成.o的文件[使用-c参数]

    ④   连接目标代码,生成可执行程序[使用-o参数]

    二、gdb调试

    1.gdb的调试命令列表.

    命令

    解释

    简写

    file

    装入想要调试的可执行文件

    list

    列出产生执行文件源代码的一部分

    l

    next

    执行一行源代码但不进入函数内部

    n

    step

    执行一行源代码而且进入函数内部

    s

    run

    执行当前被调试的程序

    r

    continue

    继续执行程序

    c

    quit

    终止GDB

    q

    print

    输出当前制定变量的值

    p

    break

    在代码里设置断点

    b

    info break

    查看设置断点的信息

    ib

    delete

    删除设置的断点

    d

    watch

    监视一个变量的值,一旦值有变化,程序停住。

    wa

    help

    GDB的帮助命令

    h

    使用方法:

    在编译程序的时候添加 –g参数,比如:

    g++ -g -o hello hello.cpp

    在gdb进行调试的使用再输入命令gdb+可执行文件名,比如:

    gdb  hello

    查看源文件 list 1,回车重复上一次指令

    之后就是根据参数列表,按照自己的需求输入自己的命令。

    参考网址:

    http://blog.csdn.net/wfdtxz/article/details/7368357

    另外,如果用makefile进行编译的话,要特别注意使用正则表达式,否则编译出的文件将不能用于调试。

    比如makefile1:(运行正常)

    而makefile2:

    会提示出如下的错误:

    三、g++编译选项详解:

    g++编译选项对应表:

    gcc/g++

    命令的常用选项格式(选项  解释)

    -o FILE

    指定输出文件名,在编译为目标代码时,这一选项不是必须的。如果FILE没有指定,缺省文件名是a.out.

    -c

    只编译生成目标文件,不链接

    -m486

    针对 486 进行代码优化。

    -O0

    不进行优化处理。

    -O 或 -O1

    优化生成代码。

    -O2

    进一步优化。

    -O3

    比 -O2 更进一步优化,包括 inline 函数。

    -w

    关闭所有警告,建议不要使用此项

    -Wall

    允许发出gcc能提供的所有有用的警告,也可以用-W(warning)来标记指定的警告

    -werror

    把所有警告转换为错误,以在警告发生时中止编译过程

    -MM

    输出一个make兼容的相关列表

    -v

    显示在编译过程的每一步中用到的命令

    -E

    只运行 C 预编译器。

    -shared

    生成共享目标文件。通常用在建立共享库时。

    -static

    链接静态库,即执行静态链接

    -lFOO

    链接名为libFOO的函数库

    -g

    在可执行程序中包含标准调试信息

    -ggdb

    在可执行程序中包含只有GNU debugger才能使别的达两条是信息

    -O

    优化编译过的代码

    -ON

    指定代码优化的级别为N,o<=N<=3

    -ansi

    支持ANSI/ISO C的标准语法,取消GNU的语法扩展中与该标准有冲突的部分(但这一选项并不能保证生成ANSI兼容的代码) 这一选项将禁止 GNU C 的某些特色, 例如 asm 或 typeof 关键词。

    -pedantic

    允许发出ANSI/ISO C标准所列出的所有警告

    -errors

    允许发出ANSI/ISO C标准所列出的所有错误

    -traditional

    支持Kernighan & Ritchie C语法(如用旧式语法定义函数);如果不知道这个选项的含义,也没有关系

    -IDIRECTORY

    指定额外的头文件搜索路径DIRECTORY。

    -LDIRECTORY

    指定额外的函数库搜索路径DIRECTORY。

    -DFOO=BAR

    在命令行定义预处理宏FOO,其值为BAR

    -IDIRNAME

    将DIRNAME加入到头文件的搜索目录列表中

    -LDIRNAME

    将DIRNAME加入到库文件的搜索目录列表中,缺省情况下gcc 只链接共享库

    -DMACRO

    以字符串“1”定义 MACRO 宏。

    -DMACRO=DEFN

    以字符串“DEFN”定义 MACRO 宏。

    -UMACRO

    取消对 MACRO 宏的定义。

  • 相关阅读:
    find指令使用手册
    IP封包协议头/TCP协议头/TCP3次握手/TCP4次挥手/UDP协议头/ICMP协议头/HTTP协议(请求报文和响应报文)/IP地址/子网掩码(划分子网)/路由概念/MAC封包格式
    Vmare虚拟机中的3种网络连接方式
    Windows10下Apache2.4配置Django
    网站配色
    js 图片轮播
    Window10下Apache2.4的安装和运行
    sqlite数据库转换为mysql数据库
    windows10 安装 mysql 5.6 教程
    win10 nginx + django +flup 配置
  • 原文地址:https://www.cnblogs.com/bugutian/p/4490902.html
Copyright © 2020-2023  润新知