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 宏的定义。

时间: 2024-10-15 06:24:33

g++编译总结的相关文章

g++编译cpp文件

gdb调试c程序打不到断点的原因可能是编译c文件的时候没有加-g选项,-g选项是编译加debug信息的,不加是打不到断点的 g++编译cpp文件 g++ -g -c *.cpp       编译 g++ -g -o exec *.o   链接 或 g++ *.cpp -o exec g++编译生成.a 静态库文件,.so为动态库 gcc *.cpp -lcp-demangle -o exec 选项 -l (ell) 通过添加前缀 lib 和后缀 .a 将跟随它的名字变换为库的名字 libcp-d

g++编译使用生成静态库和动态库(Linux)

参考文献: Linux下g++编译与使用静态库和动态库 用g++编译生成动态链接库*.so的方法及连接(多个.cc生成一个*.so) 占坑

linux下使用gcc/g++编译代码时gets函数有错误

今天在linux中使用个g++编译一个名为myfirst.cpp的代码的时候,出现如下错误 myfirst.cpp: In function ‘int main()’:myfirst.cpp:11:2: warning: ‘char* gets(char*)’ is deprecated (declared at /usr/include/stdio.h:638) [-Wdeprecated-declarations] gets(cc); ^myfirst.cpp:11:9: warning:

gcc g++编译时警告:&quot;xxxx&quot; 将随后被初始化_解决方法

gcc g++编译时警告:  "xxxx" 将随后被初始化: 这个问题的原因是在构造函数里,如果你在构造函数中初始化变量时,用的是初始化列表的方式,则初始化列表中的成员变量初始化顺序要和类定义时的变量顺序一致.

学习记录:gcc/g++ 编译与链接

gcc/g++ 编译与链接 编译与链接的过程可以分解为四个步骤:预处理.编译.汇编.链接 预处理:源代码文件和相关的头文件,被预处理器cpp预处理成一个后缀为 .i 的文件(选项:-E) 编译:把预处理完的文件进行一系列的词法分析.语法分析.语义分析以及优化后,产生相应的汇编代码文件,后缀为 .s,(选项 :-S ) 汇编:把编译阶段生成的 .s 文件转成二进制目标代码,后缀为.o,(选项:-c) 链接:把每个源代码模块独立地编译,然后按照要将它们"组装"起来.链接的主要内容就是把各个

Windows Sublime Text 配置Linux子系统(WSL)下的 gcc/g++ 编译环境

0. 简介(若已了解背景可以跳过此部分) Windows 10 Build 14316以上版本中加入了"Windows系统的Linux子系统"(Windows Subsystem for Linux,以下简称WSL)功能,这是一个完整的Linux系统.Sublime Text是一个迅速并且功能强大代码编辑器.现在网上大多数关于Sublime Text配置gcc/g++编译环境的教程都是用MinGW之类的工具,这里来讲讲如何使用WSL来创建原汁原味的gcc/g++编译环境. 1. 安装W

vc写的dll被mingw的g++编译引用

dll.cpp,用vc2017编译 #include <iostream>#include <windows.h> extern "C" __declspec(dllexport) void Go() { std::cout << "go" << std::endl;} BOOL APIENTRY DllMain( HMODULE hModule, DWORD ul_reason_for_call, LPVOID lp

Linux下g++编译thread出错的的解决方法

错误如下图所示: 因为thread是C++11新加入的特性,所以我们在用g++编译的时候不能直接用,需要在g++后面加上 -std=c++0x -pthread 如果是gcc编译多线程的话则应该要用 gcc xxx.c -lpthread来编译,因为pthread并不是linux库里面的 原文地址:https://www.cnblogs.com/wuyepeng/p/9737507.html

linux g++编译dxf文件C++解析库dxflib

DXFLIB是一个用于读取和写入AutoCAD(R)DXF文件的开源C++库.它提供读取和写入许多基本实体的功能,以及有关层和块的信息.来自QCAD的作者.最新版本下载地址:https://www.ribbonsoft.com/en/dxflib-downloads旧版本下载:https://sourceforge.net/projects/dxflib/使用手册:http://www.ribbonsoft.com/dxflib/manual.pdf中文翻译:https://www.xuebuy