在Ubuntu 810中配置的CC++编程环境测试Word格式文档下载.docx
- 文档编号:19177466
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:15
- 大小:415.47KB
在Ubuntu 810中配置的CC++编程环境测试Word格式文档下载.docx
《在Ubuntu 810中配置的CC++编程环境测试Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《在Ubuntu 810中配置的CC++编程环境测试Word格式文档下载.docx(15页珍藏版)》请在冰豆网上搜索。
iostream>
usingnamespacestd;
cout<
<
"
Hi,learningc++ing++"
endl;
保存在主文件夹目录下,名字就叫noteplus.cpp
启动终端,执行命令:
~$g++noteplus.cpp-onoteplus
~$./noteplus
Hi,learningc++ing++
提示,编译C++程序的三条命令(本部分转自网络)
g++-Wallhellocpp.cpp
gcc-Wallhellocpp.cpp-lstdc++
gfortran-Wallhellocpp.cpp-lstdc++
以上三条命令都是用来编译C++程序的。
(假定源程序名为:
hellocpp.cpp)
选项-Wall开启编译器几乎所有常用的警告──强烈建议你始终使用该选项
______________________________________________________________
注意:
开始之前请确保已经安装了build-essential软件包
编译简单的C程序
C语言经典的入门例子是HelloWorld,下面是一示例代码:
#include<
stdio.h>
int
main(void)
Hello,world!
\n"
我们假定该代码存为文件‘hello.c’。
要用gcc编译该文件,使用下面的命令:
$gcc-Wallhello.c-ohello
该命令将文件‘hello.c’中的代码编译为机器码并存储在可执行文件‘hello’中。
机器码的文件名是通过-o选项指定的。
该选项通常作为命令行中的最后一个参数。
如果被省略,输出文件默认为‘a.out’。
注意到如果当前目录中与可执行文件重名的文件已经存在,它将被复盖。
选项-Wall开启编译器几乎所有常用的警告──强烈建议你始终使用该选项。
编译器有很多其他的警告选项,但-Wall是最常用的。
默认情况下GCC不会产生任何警告信息。
当编写C或C++程序时编译器警告非常有助于检测程序存在的问题。
本例中,编译器使用了-Wall选项而没产生任何警告,因为示例程序是完全合法的。
要运行该程序,输入可执行文件的路径如下:
$./hello
Hello,world!
这将可执行文件载入内存,并使CPU开始执行其包含的指令。
路径./指代当前目录,因此./hello载入并执行当前目录下的可执行文件‘hello’。
捕捉错误
如上所述,当用C或C++编程时,编译器警告是非常重要的助手。
为了说明这一点,下面的例子包含一个微妙的错误:
为一个整数值错误地指定了一浮点数控制符‘%f’。
main(void)
printf("
Twoplustwois%f\n"
4);
一眼看去该错误并不明显,但是它可被编译器捕捉到,只要启用了警告选项-Wall。
编译上面的程序‘bad.c’,将得到如下的消息:
$gcc-Wallbad.c-obad
bad.c:
Infunction'
main'
:
6:
warning:
doubleformat,differenttypearg(arg2)
这表明文件‘bad.c’第6行中的格式字符串用法不正确。
GCC的消息总是具有下面的格式文件名:
行号:
消息。
编译器对错误与警告区别对待,前者将阻止编译,后者表明可能存在的问题但并不阻止程序编译。
本例中,对整数值来说,正确的格式控制符应该是%d。
如果不启用-Wall,程序表面看起来编译正常,但是会产生不正确的结果:
$gccbad.c-obad
$./bad
Twoplustwois2.585495
显而易见,开发程序时不检查警告是非常危险的。
如果有函数使用不当,将可能导致程序崩溃或产生错误的结果。
开启编译器警告选项-Wall可捕捉C编程时的多数常见错误。
编译多个源文件
一个源程序可以分成几个文件。
这样便于编辑与理解,尤其是程序非常大的时候。
这也使各部分独立编译成为可能。
下面的例子中我们将程序HelloWorld分割成3个文件:
‘main.c’,‘hello_fn.c’和头文件‘hello.h’。
这是主程序‘main.c’:
#include"
hello.h"
hello("
world"
在先前的例子‘hello.c’中,我们调用的是库函数printf,本例中我们用一个定义在文件‘hello_fn.c’中的函数hello取代它。
主程序中包含有头文件‘hello.h’,该头文件包含函数hello的声明。
我们不需要在‘main.c’文件中包含系统头文件‘stdio.h’来声明函数printf,因为‘main.c’没有直接调用printf。
文件‘hello.h’中的声明只用了一行就指定了函数hello的原型。
voidhello(constchar*name);
函数hello的定义在文件‘hello_fn.c’中:
void
hello(constchar*name)
Hello,%s!
name);
语句#include"
FILE.h"
与#include<
FILE.h>
有所不同:
前者在搜索系统头文件目录之前将先在当前目录中搜索文件‘FILE.h’,後者只搜索系统头文件而不查看当前目录。
要用gcc编译以上源文件,使用下面的命令:
$gcc-Wallmain.chello_fn.c-onewhello
本例中,我们使用选项-o为可执行文件指定了一个不同的名字newhello。
注意到头文件‘hello.h’并未在命令行中指定。
源文件中的的#include"
指示符使得编译器自动将其包含到合适的位置。
要运行本程序,输入可执行文件的路径名:
$./newhello
源程序各部分被编译为单一的可执行文件,它与我们先前的例子产生的结果相同。
链接外部库
库是预编译的目标文件(objectfiles)的集合,它们可被链接进程序。
静态库以后缀为‘.a’的特殊的存档文件(archivefile)存储。
标准系统库可在目录/usr/lib与/lib中找到。
比如,在类Unix系统中C语言的数学库一般存储为文件/usr/lib/libm.a。
该库中函数的原型声明在头文件/usr/include/math.h中。
C标准库本身存储为/usr/lib/libc.a,它包含ANSI/ISOC标准指定的函数,比如‘printf’。
对每一个C程序来说,libc.a都默认被链接。
下面的是一个调用数学库libm.a中sin函数的的例子:
math.h>
doublex=sin(2.0);
Thevalueofsin(2.0)is%f\n"
x);
尝试单独从该文件生成一个可执行文件将导致一个链接阶段的错误:
$gcc-Wallcalc.c-ocalc
/tmp/cckDHfI8.o:
Infunction`main'
calc.c.text+0x1b):
undefinedreferenceto`sin'
函数sin,未在本程序中定义也不在默认库‘libc.a’中;
除非被指定,编译器也不会链接‘libm.a’。
为使编译器能将sin链接进主程序‘calc.c’,我们需要提供数学库‘libm.a’。
一个容易想到但比较麻烦的做法是在命令行中显式地指定它:
$gcc-Wallcalc.c/usr/lib/libm.a-ocalc
函数库‘libm.a’包含所有数学函数的目标文件,比如sin,cos,exp,log及sqrt。
链接器将搜索所有文件来找到包含sin的目标文件。
一旦包含sin的目标文件被找到,主程序就能被链接,一个完整的可执行文件就可生成了:
$./calc
Thevalueofsin(2.0)is0.909297
可执行文件包含主城许的机器码以及函数库‘libm.a’中sin对应的机器码。
为避免在命令行中指定长长的路径,编译器为链接函数库提供了快捷的选项‘-l’。
例如,下面的命令
$gcc-Wallcalc.c-lm-ocalc
与我们上面指定库全路径‘/usr/lib/libm.a’的命令等价。
一般来说,选项-lNAME使链接器尝试链接系统库目录中的函数库文件libNAME.a。
一个大型的程序通常要使用很多-l选项来指定要链接的数学库,图形库,网络库等。
编译C++/Fortran
你可能知道:
GCC是GNU编译器集合(GNUCompilerCollection)的首字母缩写词。
它可以编译C,C++,Objective-C,Fortran,Java和Ada语言。
前面我们只涉及到C语言,那么如何用gcc编译其他语言呢?
编译c++
(下面两条命令是等价的,不过我相信你会选择前者^_^)
g++-Wallhello.cpp-ohello
gcc-Wallhello.cpp-ohello-lstdc++
编译fortran
如果你的gcc版本>
=4.0,以下命令任选其一即可
gfortran-Wallhello.f-ohello
gcc-Wallhello.f-ohello-lgfortran-lgfortranbegin
如果gcc版本<
4.0,那么以下命令任选其一
g77-Wallhello.f-ohello
gcc-Wallhello.f-ohello-lfrtbegin-lg2c
关于本机装的Anjuta
Anjuta只不过是个写C,C++的IDE环境而已。
配备库文件后,才可以写程序,包括在终端运行的程序(类似于DOS程序),和图形界面程序(类似于窗口程序)。
下面就用Anjuta写一个c,写一个c++
应用程序|编程|AnjutaIDE
新建工程,用向导生成一个C程序的框架,你在VisualC++一样,顿时生成许多文件,用IDE就是这样麻烦。
选择C标签页下的Generic
工程名用默认的foobar-sample
在optional下全部选择:
无
生成目的地为:
主文件夹:
zhouxiongfei之下新建一个文件夹:
test
在Anjuta左边文件目录中,打开src文件夹,看到有个main.c,打开它,可以看到向导已经为我们生成了一个c程序:
/*-*-Mode:
C;
indent-tabs-mode:
t;
c-basic-offset:
4;
tab-width:
4-*-*/
/*
*main.c
*Copyright(C)周雄飞2008<
pack39@>
*
*main.cisfreesoftware:
youcanredistributeitand/ormodifyit
*underthetermsoftheGNUGeneralPublicLicenseaspublishedbythe
*FreeSoftwareFoundation,eitherversion3oftheLicense,or
*(atyouroption)anylaterversion.
*main.cisdistributedinthehopethatitwillbeuseful,but
*WITHOUTANYWARRANTY;
withouteventheimpliedwarrantyof
*MERCHANTABILITYorFITNESSFORAPARTICULARPURPOSE.
*SeetheGNUGeneralPublicLicenseformoredetails.
*YoushouldhavereceivedacopyoftheGNUGeneralPublicLicensealong
*withthisprogram.
Ifnot,see<
http:
//www.gnu.org/licenses/>
.
*/
Helloworld\n"
return(0);
按shift+F11生成工程(对应于:
生成|生成工程)
按F3(对应于:
run|执行程序(需要选择要运行是那个程序)就可以在终端运行了
写C++方法与上面相同,只是要选择C++标签下的GenericC++而已。
下面接着来,生成C图形界面的程序
要生成C图形界面的程序,得安装GTK环境
安装GTK环境只要安装一个gnome-core-devel就可以了,里面集成了很多其他的包。
除此之外还要转一些其他的东西,如libglib2.0-doc、libgtk2.0-doc帮助文档,devhelp帮助文档查看,glade-gnome、glade-common、glade-doc图形界面设计等。
sudoapt-getinstallgnome-core-devel
sudoapt-getinstalllibglib2.0-doclibgtk2.0-doc
sudoapt-getinstalldevhelp
sudoapt-getinstallglade-gnomeglade-commonglade-doc
写个测试程序,全是抄别人的,相当于windows下的SDK了。
记事本编写,终端命令编译:
gtk/gtk.h>
voidhello(GtkWidget*widget,gpointerdata)
g_print("
HelloUbuntu!
gintdelete_event(GtkWidget*widget,GdkEvent*event,gpointerdata)
g_print("
deleteeventoccurred\n"
return(TRUE);
voiddestroy(GtkWidget*widget,gpointerdata)
gtk_main_quit();
intmain(intargc,char*argv[])
GtkWidget*window;
GtkWidget*button;
gtk_init(&
argc,&
argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window),"
delete_event"
GTK_SIGNAL_FUNC(delete_event),NULL);
gtk_signal_connect(GTK_OBJECT(window),"
destroy"
GTK_SIGNAL_FUNC(destroy),NULL);
gtk_container_set_border_width(GTK_CONTAINER(window),10);
button=gtk_button_new_with_label("
gtk_signal_connect(GTK_OBJECT(button),"
clicked"
GTK_SIGNAL_FUNC(hello),NULL);
gtk_signal_connect_object(GTK_OBJECT(button),"
GTK_SIGNAL_FUNC(gtk_widget_destroy),GTK_OBJECT(window));
gtk_container_add(GTK_CONTAINER(window),button);
gtk_widget_show(button);
gtk_widget_show(window);
/*显示一个窗口*/
gtk_main();
/*进入主循环*/
return(0);
保存为:
gtkhello.c
用下面命令编译运行
$gccgtkhello.c-ogtktest`pkg-config--cflags--libsgtk+-2.0`
$./gtktest
会显示一个带有一个按钮的窗口,点击按钮以后窗口关闭,命令行显示HelloUbuntu!
如下图所示:
如果要生成C++的图形界面,得安装gtkmm,或者QT
配备类似于MFC的环境
一般有两种选择:
gtkmm版本,或者是qt版本的图形类库
这里讲述的是gtkmm版本。
在添加删除程序里面搜索gtkmm安装最新版本把dev包也装上。
搜索gnomemm把libgnomemm也装上,包含dev包。
同样的还有libglademm。
一定都要包含dev包。
这时你的Ubuntuc++开发环境就配置好了,使用:
pkg-config–cflagsgtkmm-2.4;
pkg-config–cflagslibglademm-2.4,验证是否安装好了。
提示缺少什么就安装什么。
要命的是,在我这个Ubuntu中的添加删除中压根儿就搜索不到gtkmm!
!
从网上下载的源码包:
gtkmm-2.8.3.tar.bz2
解压
启动终端,转到解压的目录下:
执行终端命令:
#./configure
#make
#makeinstall
(注明,看到#号了吗?
这表明目前是在root用户下,权限最高,如果是在一般用户下,即$之下,则需要加上sudo,暂时借用一下管理员最高权限,在执行这个命令的时候,呵呵,否则会出错的啦。
即sudomakeinstall)
实施源代码安装方式。
OK
在Anjuta中可以看到它了GTKmm
!
新建一个工程,选择GTKmm
在选项中只保留:
Addsharelibarrysupport为是,其它为否。
自动生成一个窗口程序的所有相关代码,生成的时间有点长。
主程序代码:
*main.cc
*main.ccisfreesoftware:
*underthetermsoftheGNUGeneralPublicLicenseas
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 在Ubuntu 810中配置的CC+编程环境测试 Ubuntu 810 配置 CC 编程 环境 测试