g++教程.docx
《g++教程.docx》由会员分享,可在线阅读,更多相关《g++教程.docx(19页珍藏版)》请在冰豆网上搜索。
g++教程
G++教程
各位选手大家好,本文档为gcc/g++/gdb使用教程,本教程所提及的基本操作一般不会因为版本特性而出错。
教程将介绍如何在各种g++内核的IDE和文字界面下使用g++编译链接C语言源程序生成目标代码,创立动态链接库(.so,.dll),使用动态链接库。
建议先阅读VisualStudio教程
简介
gcc/g++是gnu项目下的C/C++编译器,是所有Linux环境下默认的C程序编译器。
windows化的g++编译器主要有MinGW、cygwin等等。
以这些编译器为基础开发的IDE(集成开发环境)有DevC++、CodeLite等等。
g++内核的IDE的使用
IDE的操作基本上都大同小异,可以参考VisualStudio教程
新建一个工程
例如在DevC++4.9.9.2(内核g++3.4.2好像有点老)中,新建工程时出现
选择consoleapplication(控制台应用程序)即可建立平时大家用的C程序的工程,典型特征是有个唯一的main函数,生成exe可执行文件。
选择dll即可建立动态链接库工程,运行会生成dll而不是exe。
CodeLite6.1.1(g++4.8.1)中
需要先建立wrokspace工作区,再在其中建立project工程,注意选择路径。
建立工程时,会选择工程类型。
选择console下的g++即可建立C++工程,选择gcc即可建立C工程,其他选项也可以自己尝试。
选择library下的Dynamiclibrary即可建立动态链接库工程,工程最终生成dll文件。
Linux环境下的IDE操作方式也差不多,这里以Ubuntu13.10下的Code:
:
Block12.10为例
选择Consoleapplication即可建立可执行文件工程,
选择Sharedlibrary即可建立动态链接库工程。
生成你的工程
写好你的程序之后,选择编译即可编译你的源代码,选择运行即可生成对应的可执行文件或者动态链接库。
注意添加必要的头文件,如sdk.h
Debug模式会以更加严格的要求检查你的代码,一般在调试时候使用。
最终生成你的AI时,请改成Release模式。
Debug模式和Release模式实际上只是改了一些编译选项。
这个设置一般在主界面或者工程选项里就可以找到
添加断点和调试
在随便哪一行代码最左边的空白部分点击一下即可添加断点。
之后执行debug调试代码时程序运行到这一行时就会停下来,这时就可以查看各种变量的值,进行检查。
单步执行,进入函数,跳出函数等等都和VS是一样的,自己尝试下子就会了啦:
-D
本地调试AI
在一个dll工程中写好你的ai调试完成并以release模式运行后,将Release文件夹下你的ai的dll文件拷贝到和游戏主程序exe放到一起,并在这个目录下放入另一个ai,放入map.txt地图文件。
打开cmd切换工作目录到你需要的目录下,执行
即可。
如果IDE提供设置命令参数的功能,则可以在IDE中设置参数为你的两个AI的名字,直接在IDE中进行调试
参见VisualStudio教程
文字界面的编译与调试
安装与配置
linux环境下你可以非常方便地直接在命令行中进行程序的编辑调试和运行,g++和gcc一般都是自带的无需配置安装
注意在windows环境下试图直接安装编译器时(MinGW等)而不是IDE时,可能会需要配置环境变量才能使程序找到自带的库,详细可以自行google。
以MinGW+win7为例,一般来说需要:
“我的电脑”右键->属性->高级系统设置->高级->环境变量->
选择Path编辑,在后面添加(你的MinGW安装路径)\bin;,例如C:
\MinGW-4.8.1\bin
如果选择系统变量添加则会对本机的所有用户生效,选择用户变量添加则会只对该用户生效。
添加Path之后,在命令行中就可以直接使用g++.exe命令了,而不必每次都先切换到该目录下或者写全部的路径。
类似的继续添加MinGW=C:
\MinGW-4.8.1\
C_INCLUDE_PATH=%MinGW%\include
CPLUS_INCLUDE_PATH=%MinGW%\include
LIBRARY_PATH=%MinGW%\lib
打开cmd,在任意工作目录下使用g++.exe–version可以成功查看版本信息即说明配置成功。
之后就可以直接在命令行中使用g++.exe等命令了。
生成目标文件
用任意文本编辑工具写好你的C源程序代码之后(记事本、写字板、vim等等)
打开命令提示符,切换工作目录为你的源程序所在的目录
输入g++.exe3.cc即可直接生成可执行文件,默认文件名为a.exe
此时我的该目录下就会多出一个a.exe文件,双击即可运行
当然现在只会一闪而过Hello,world!
,你可以自行添加让程序等待一个输入再退出的代码。
比如改成
那么现在程序将会显示Hello,world!
,并等待用户输入一个字符之后退出。
(想知道如何实现按下任意键就退出,可以查阅conio.h//windows或者curses.h//linux)
如果不想要名字是a.exe,可以添加-o选项
比如上面那行代码,将会把我的输出exe文件命名为3.exe
如果代码有问题,编译器会直接显示错误,比如我现在去掉一个分号。
如果要生成dll动态链接库,添加-shared选项
一般来说还会添加-fPIC选项,表示生成路径无关代码(PathIndenpentCode)
如果你要使用的dll和C源文件在同一个目录下,可以直接编译生成目标代码。
这个程序将会调用在dll中提供的add函数,提示用户输入两个正整数并输出他们的和。
你也可以显式的指定链接的库。
首先使用-c选项只编译源代码生成obj文件,指定输出文件名为2.o
再将2.o与1.dll显式链接,即在-L选项后面写你需要链接的动态链接库名字。
这个新生成的2.exe和原来的是一模一样的。
编译时使用-o1,-o2,-o3,-o4选项可以让g++帮你优化编译,默认使用-o1,如果需要可以使用-o2。
这些选项已经足够用来生成工程和生成使用dll了,想要了解更多,可以google或者直接到官网查看帮助文档。
Linux下会有自带的完善的帮助文档,多用用man、info就可以了。
断点与调试
输入gdb.exe,进入gdb程序。
gdb是文字界面下的代码调试工具,可以完成所有一个调试工具可以完成的功能,例如设置断点、单步执行、查看变量、改变变量等等。
使用help命令查看帮助,help(命令名)查看该命令的帮助
例如我想找如何设置一个断点的命令
再输入helpbreakpoints查看这一目录下的详细帮助信息。
下面还有很多,大概浏览一下,让我们最感兴趣的就是break——setbreakpoints
可以看到,基本用法就是break[行号/函数名]添加断点,程序将会在这一行开始时停下来。
其他部分可以自己查看帮助文档,linux系下的东西多用用help、man、info就可以懂很多东西。
示例
这是一个简单的作除法的函数,当输入a为0时,将会出现一个运行时错误,提示被0除或者溢出。
首先在编译生成程序时全部加上-g编译选项保留编译信息以便gdb可以读取这些信息
打开gdb,装载3.exe并运行
file命令将3.exe装载进gdb中,run命令将在gdb中运行3.exe,详细用法可以help。
这一次运行a=3,b=18,输出b÷a=6,再读取一个字符之后程序正常退出。
这一次运行a=0,b=3,由于被0除程序出错,gdb显示出错信息,SIGFPE表示“错误的算数操作”,出错位置在3.cc的main函数的第8行
用list查看出错位置之前的代码
在第6行设置断点
再次运行时,就会在第6行停下来并显示这一行的代码。
输入step单步执行,输入continue继续执行到下一个断点。
display可以查看当前的变量值或者表达示的值,
watch+表达式名设置查看变量,可以在每个断点的时候查看
setvariable变量名=值可以在调试中途改变变量的值
差不多了,基本够用,如果想要其他更强大的功能可以help或者自行尝试或者google。
如果是要用到dll的程序,基本一样。
如果我们有下面两个源程序,主程序调用dll中的divide函数完成除法操作。
将两个源程序以-g模式编译并链接
打开gdb加载2.exe
上面的代码我直接试图在1.dll的代码divide中设置断点,gdb会提示你是否进入dll内部设置断点,输入y就可以正确设置断点了。
之后运行2.exe就会在divide里停下来。
其他功能还请各位多多探索哦。