仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 654|回复: 10
打印 上一主题 下一主题

[其他Linux] 来讲讲:linux程序开辟进门

[复制链接]
兰色精灵 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 12:01:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo、pswho
前一阵子在QQ上和伴侣谈天的时分,总会看到有人说Linux上的使用程序开辟是妙手才能够完成的,并且这类“科学”在今朝仿佛还很广泛。但是,情形并非如许的,从程序库的撑持方面,Linux平台为用户级使用程序的开辟供应了良多功效壮大且丰厚的程序库,并且它们年夜部分是跨平台的(Boost、OpenGL、STL、Qt、Java等)和基于POSIX尺度的(glibc等),同时Linux内核还为驱动程序的开辟供应了功效完整的内核接口,从开辟工具方面,Linux供应了功效壮大的编译器GCC和调试器GDB,借助它们的匡助,我们能够很轻松的在Linux上开辟出可移植性的使用程序。既然云云,“科学”又源于何来呢?我想,一方面因为具体先容Linux各类开辟的书本较少,各类Linux使用在国际仍不提高,另外一方面则是因为良多人在安装好一个Linux后,苦于找不到一个轻车熟路的IDE情况,从而感应手足无措,究竟,我们良多人都习气了写好程序后,按下F5,剩下的义务就让IDE全权代办署理了。实在想在Linux下云云这般固然也没成绩。既然说到了IDE,就让我们从它入手下手吧,信任选择一个好的IDE情况是你全部进修历程的一个不错的入手下手。工欲善其事必先利其器――IDE篇
实在Linux下有很多功效壮大的IDE情况,由于从某种意义上说,Linux是专为开辟者筹办的操纵体系,这个器材固然少不了,在这里为读者先容一些对照经常使用的IDE。
KDevelop
这是一个用Qt开辟的IDE,其次要撑持的言语是C/C++,
Eclipse
最近几年来,eclipse能够说开展极其敏捷,它不但是一个以java为主的开辟平台,其功效壮大的插件系统布局使得它能够被看成各类使用程序来利用。作为各类插件的载体,eclipse供应了完全的GUI接口,用户完整能够借助eclipse来只体贴本人想做的事情。
Emacs
VIM
山高月晓内情毕露――IDE背景的故事GCC篇
后面我们扼要先容了一些IDE情况,个中一切C/C++相干程序的编译都是由GCC来完成的,而IDE只不外起到了一个搜集编译信息和为我们的项陌生成makefile等感化(前面我们会提到)。出于今朝Linux开辟的特性,C还是体系开辟的支流言语。以是,对GCC有一个周全的懂得是很有需要的,一旦IDE不克不及满意你的需求,我们要有手工打造程序的才能,并且出于进修的目标,我们常常不必要IDE天生的那些庞大的文件,为一个Helloworld天生2M多的文件明显是过剩的。
GCC的全称是GNUCompilerCollection,从这个名字我们不丢脸出,GCC代表着一个编译器的汇合,今朝GCC能够撑持C,C++,Objective-C,Objective-C++,Fortran,Java,andAda等言语。可是出于一样平常性思索,我们这里只会商GCC中的C/C++部分。
今朝GCC的最新公布版是4.0.0,可是这个版本因为利用了新手艺和新的编码标准,良多旧的代码都必要修正才能够经由过程编译,以是其实不保举利用这个版本。而绝对不乱的新版本今朝是3.4.4,人人能够到GNU的主页上更新下载。那末事实GCC壮大在那里,怎样利用?上面我就经由过程几个复杂而实践的例子带你看看GCC供应的壮大功效。
经由过程Helloworld的编译熟习GCC的基础利用办法
仿佛为一切新言语供应一个HelloWorld样本程序已成了一种不成文的尺度,人们经由过程它来熟悉言语的一些基础要素。在这里,我们利用一个HelloWorld来看看怎样用GCC天生可实行文件。
把下面的文件存成helloworld.c,以后翻开把持台,输出以下的命令gcchelloworld.cCohelloworld假如统统一般的话,你的把持台上应当没有任何输入。用ls检察你的事情目次,你会发明目次下多了一个名为helloworld的可实行文件,以后,实行./hellworld
就会看到这个程序的输入了
很复杂不是吗?可是学过盘算机的伴侣都应当晓得,程序的编译历程要分为下图所示的历程而GCC的壮大的地方就在于它同意你在下面所示的任何一个过程当中停上去检察两头了局,并对其加以把持。
1.预处置起首是预处置历程,GCC的-E选项可让GCC在预处置后中断编译,并向尺度输入打印预处置事后的文件。上面的-o用于指定输入文件的文件名。
gccCEhellowrold.cCohelloworld.cpp上面是helloworld.cpp的一部分的内容,我们看到,文件已包括了stdio.h中的内容。
假如我们想实行下一步的编译历程,能够持续利用GCC的-x<languagetype>选项,该选项用于显现指定文件的后缀名(而不是让编译器依据后缀来自行判别)。我们对照经常使用的languagetype有以下几种,(假如读者想取得更加完全参数说名,请参考GCCmanual):
lcc-headerc-cpp-output
lc++c++-headerc++-cpp-output
lassemblerassembler-with-cpp
别的,下表列出了经常使用的GCC后缀名



1234下一页


写学习日记,这是学习历程的见证,同时我坚持认为是增强学习信念的法宝。以上是我学习Linux的心得体会,希望对大家的学习有所帮助,由于水平有限,本文难免有所欠缺,望请指正。
兰色精灵 该用户已被删除
沙发
 楼主| 发表于 2015-1-16 13:12:58 | 只看该作者

来讲讲:linux程序开辟进门

系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo、pswho
</P>固然,你也能够省略失落languagetype的部分,这时候候GCC会依据文件的后缀名自行判别,就像你没有利用该选项一样。
上面持续我们的编译历程
2.编译假如我们想取得编译后的源文件可使用-S选项,该选项让gcc只实行编译(天生汇编文件)而不举行汇编(天生方针文件),此时,我们能够用-o选项指定输入的汇编文件的称号。
gccCShelloworld.cppCohellowrld.S
3.汇编别的,我们还可使用GCC的-c选项来编译和汇编源文件而不链接,此时-o指定的输入文件就是编译后的方针文件名gccCxc++-chelloworld.cppCohelloworld.o
4.链接最初,我们能够使用GCC来把我们方才天生的.o文件链接成可实行程序gcchelloworld.oCohelloworld这一次,我们利用了-o选项指定了可实行文件名,也就是说,依据输出文件范例的分歧,-o有着分歧的寄义。
5.函数库的链接和包括文件关于我们编写的任和一个程序,没有库函数的撑持是不成设想的,而当我们要利用的头文件和函数库不在GCC默许的搜刮路径下的时分(比方OpenGL、Qt、KDE、Boost等),我们就必要手工来告知GCC他们的地位。
先来看头文件路径的指定。我们能够使用-I<dir_name>来指定我们但愿GCC往搜刮的头文件目次,比方我们要利用X11的程序,我们就要利用上面的选项再来看库函数的设置:我们经由过程-L<dir_name>和-l<lib_name>两个命令行选项完成义务。个中-L用于告知GCC在<dir_name>中往寻觅函数库,而-l选项则告知GCC利用用户指定的程序库。在Linux中,函数库的定名是遵守UNIX商定的,即lib{libname},比方libsocket.so,以是当你必要告知GCC利用这些库的时分,你就能够利用-lsocket选项。一般,这两个命令是分离在一同利用的,比方援用X11程序库的时分,我们能够如许:
CL/usr/X11R6/libClX11
别的,GCC在默许情形下利用共享库来链接程序,而当你想链接静态库的时分,必定要利用-static选项,比方-lncurses-static
在这一部分的最初,我们对编译时用到的GCC经常使用命令做一个扼要的总结
<Palign=center>

                               
登录/注册后可看大图

下面,我们提到了关于GCC编译的经常使用命令,这里别的增补一些匡助性的经常使用命令,他们可让你对GCC的基础设置和利用作一个懂得。
<Palign=center>

在这部分的最初,我们来谈一谈关于构建软件时链接参数的设定成绩。在下面的第5部分我们已提到了,函数库的利用是必要-L和-l一同共同来利用的,但实践上,常常一个像样的程序必要良多库的撑持,比方,假如你必要编写一个GTK程序,我们必要上面的链接参数:-L/usr/lib-L/usr/X11R6/lib-lgtk-lgdk-rdynamic-lgmodule-lglib-ldl-lXi-lXext-lX11Clm,看上往有些吓人,你大概会问,我怎样晓得必要这些呢,假如我想编写KDE的程序呢,另有OpenGL呢?实在,情形比你设想的要好良多,在/usr/bin目次下,有良多名为xxx-config的剧本,它们的感化就是向用户显现编译链接程序时利用的参数的。这些剧本能够承受一些参数,对照经常使用的有―libs用于列出链接特定程序时利用的程序库,别的--cflags用于天生头文件的包括目次,也就是下面我们提到的-I参数。因而,关于GTK程序,我们可使用上面的命令来编译:gccgtksource.c`gtk-configClibs--cflags`固然,为每种程序写一个config明显不是一个好举措,今朝新的开辟包都利用pkg-config这个剧本来天生链接参数。你可使用pkg-configClist-all检察pkg-config撑持的一切链接参数当你在下面这份列表中查到了本人想要程序包时,就能够利用上面的命令来编译程序了gcc<sourcefile>.suffix`pkg-config<pkgname>--libs--cflags`
让GCC匡助你更好的事情
下面我们复杂先容了GCC的经常使用命令行选项,实在GCC的功效比下面提到的那些要丰厚很多,GCC对代码的告诫、优化、调试等方面供应了丰厚的撑持,上面我们就从一些例子来看看GCC供应的这些功效。
1.对成绩代码提出告诫
GCC对程序代码供应了完全的反省功效,因为C/C++言语自己的特性,良多毛病都是程序员偶然间犯下的,比方利用了不决义的变量、在bool表达式中利用了=而不是==等等成绩,使用GCC供应的代码反省功效,我们可让编译器为我们找到这些成绩,制止运转时产生劫难。
起首,我们来看一个“成绩代码”
/*test_warning.cWeusethisfiletocheckthewarningfacilitiesprovidedbyGCC*/#include&l
上一页1234下一页


如果你想在以后的生涯中在软件行业工作的话,学习linux是一项基本技能,所以打从你打算学习linux那天起,放弃windows吧!因为它除了能给你带来片刻的娱乐,别无其他;
兰色精灵 该用户已被删除
板凳
 楼主| 发表于 2015-1-16 13:28:33 | 只看该作者

来讲讲:linux程序开辟进门

当你经过一段时间的学习后就应该扩充自己的知识,多学习linux命令,但是不要在初学阶段就系统的学习linux命令。
t;stdio.h>#include<stdlib.h></P>voidmain(){/*mainshouldreturnint*/
inta,b;longlongl=2.2;/*longlongtypeisGNUextension,notstandardANSI/ISOtype*/
miss_decl();/*Wecallanundeclaredfunction*/
if(a=0)/*Maybewewant==hereinsteadof=*/
printf(“areallyequalsto0?\n”);if(b!=0)/*Weuseduninitializedvariables*//*%dand“Weshouldputbhere”don‘tmatch*/printf(“Wemakeamistakeagain!b=%d\n”,“Weshouldputbhere”);
};
voidmiss_decl(){
/*/*Thistypeofannotationisprohibited*/
printf(“Weshouldputthedeclarationbeforeit‘sbeenused!\n”);
}
下面这些代码存心打造了良多编程中呈现的罕见成绩,接上去,我们就用这段代码来检测一下GCC供应的各类经常使用的告诫举措措施。
起首,我们不利用任何告诫举措措施编译下面的程序gcctest_warning.cCotest_warning默许情形下,GCC会给出输入,个中GCC辨认出了main函数不尺度(warning)和利用了未声明的函数(error)两个成绩,可是其他的GCC并未发觉。
1.使用-pedantic找出不切合ANSI/ISO尺度的代码
实行上面的命令:gccCpedantictest_warning.cCotest_warning能够看到,此次GCC以告诫的情势呈报了代码中longlong的利用,可是要申明的是我们其实不能依附这个选项来包管我们的代码完整切合ANSI/ISO尺度,由于该选项只呈报ANSIC请求编译器举行审查的内容。别的,你还可使用-pedantic-errors让GCC把一切的告诫都酿成毛病。
2.使用-Wformat反省printf中的参数不婚配成绩实行上面的命令:gccCWformattest_warning.cCotest_warning
3.使用-WComment找出正文中的毛病实行上面的命令:gccCWCommenttest_warning.cCotest_warning
4.使用-Wparentheses查找bool表达式中的=毛病实行上面的命令:gccCWparenthesestest_warning.cCotest_warning
5.用-Wuninitialized查找未初始化变量的利用实行上面的命令:gccCOCWuninitializedtest_warning.cCotest_warning值得申明的是,在利用这个选项的时分,必定要共同上-O(前面我们会提到)选项
6.使用-Wimplicit-function-declaration/-Werror-implicit-function-declaration反省未声明函数的利用实行上面的命令:gcc-Wimplicit-function-declarationtest_warning.cCotest_warning别的-Werror-implicit-function-declaration和-Wimplicit-function-declaration感化是相似的,只是假如你利用了未声明的函数,前者会把它以为是一个毛病。
7.假如你只是想对你的代码举行周全的反省,你年夜可不用把下面的选项一并列出来,GCC供应了-Wall选项,寄义就是列出一切代码中的告诫实行上面的命令:gccCWalltest_warning.cCotest_warning8.假如你想走另外一个极度,也就是不想让gcc输入任何告诫,那末利用-w选项,该选项克制一切的告诫实行上面的命令:gccCwtest_warning.cCotest_warnin
<输入了局>
关于下面一切的选项,你都能够把它们和-Werror选项一同利用,如许就能够把一切的告诫都酿成毛病。别的,假如你只是想对代码举行反省而其实不实行编译的话,可以使用-fsyntax-only选项,像上面的命令如许gccCfsyntax-onlytest_warning.c基础下去说,我们经常使用的一些告诫选项就是这些,而个中-Wall更是我们极其经常使用的功效。
2.优化选项这一部分的内容能够分红两部分,一部分是让编译器对代码举行剖析
后,举行的代码优化,另外一部分是我们能够为编译器制订一些关于硬件的信息,让他天生对硬件分离的更好的代码,而我们之以是要用源代码来编译程序,良多情形下,是出于这方面的缘故原由。
起首来看代码优化,从代码的全体优化上,GCC供应了上面的选项
-OCO1
这两个选项的寄义是一样的
上一页1234下一页


不同版本的Linux命令数量不一样,这里笔者把它们中比较重要的和使用频率最多的命令。
兰色精灵 该用户已被删除
地板
 楼主| 发表于 2015-1-16 13:30:47 | 只看该作者

来讲讲:linux程序开辟进门

按照它们在系统中的作用分成几个部分介绍给大家,通过这些基础命令的学习我们可以进一步理解Linux系统:
,GCC将实行削减代码尺寸和实行工夫的优化,关于那些会严峻影响编译工夫的优化选项,这个级其余优化其实不会实行。</P>-O2
在这一级别GCC将会供应一切撑持的优化,但这个中其实不包含以空间换工夫的优化手腕,比方编译器不会利用轮回睁开和函数内联。和-O比拟,该选项进一步加速了编译工夫和天生代码的功能。
-O3
除-O2供应的优化选项外,还指定了-finline-functions,-funswitch-loops和-fgcse-afer-reload选项,目标只要一个就是尽力实行代码优化。
-Os
这个选项是专门用来优化代码尺寸的,-Os翻开了一切-O2级别中不会光鲜明显增加代码尺寸的优化选项
-O0
该选项代表不实行优化
在这里要申明的是,只管GCC供应了1~3和s这4个全体优化选项,但从实践的优化效果下去看,常常O3优化出来的程序的效力并非最高的,而年夜部分情形下我们都在利用-O2,假如你但愿取得最高的效力好处,那末无妨这4个选项都尝尝。别的,实在这些选项只不外是GCC供应的良多片面优化的一个组合,假如你想懂得更加详细的优化内容,能够往检察GCC手册,出于篇幅限定,这里不细谈了。最初要记着的一点是,假如你的程序是用于高精度数值盘算的,那末记着不要利用下面任何的优化选项。
上面来看基于硬件优化,因为这部分和盘算机硬件相干,这里仅用Intel的CPU做一些申明:关于一切为Intel和AMDx86-64供应的优化选项都是用m开首的,上面写一些经常使用的选项:
-march
该选项用来指定CPU的范例,经常使用的有i386\i486\i586\pentium-mmx\i686\pentium2\pentium3\pentium-m\pentium4\prescott\k6\athlon\athlon-4\k8等等,读者能够依据本人的情形举行指定。
-mfpmath
该选项用于指定浮点运算单位的范例。包含
387
利用尺度的数学协处置器
sse
利用SSE指令集供应的标量浮点运算。在Pentium3\Athlon-4和更新的芯片上撑持这个特征。别的,在pentium4和AMDx86-64处置器上,SSE2还能够举行双精度浮点盘算。
sse,387夹杂利用387数学协处置器和SSE指令集,该选项能够充实的使用CPU的浮点存放器和xmm存放器,可是该选项还处在实验阶段。
-malign-double
该选项使得GCC把double\longdouble\longlong范例的变量在4字节或2字节地点上对齐,在Pentium级的CPU上,这会使得代码的实行速率更快,固然带来的价值是必要更多的内存来实行程序。-mmmxCmsseCmsse2Cmsse3Cm3dnow这些选项用来启动内置函数间接利用这些处置器扩大指令的功效。在编译3D或多媒体程序的时分,利用他们长短常无效的。
3.对换试的撑持当程序堕落的时分,我们能够在VisualStudio中轻松的举行调试,而在Linux中,一旦呈现SegmentationFault,仿佛我们除用眼睛往看代码就没有更好的选择了,实在情形否则,用GCC向程序到场一些得当的调试信息,我们能够使用GDB往调试程序。在这里,我们先容最为经常使用的-g和-ggdb选项。
先来看-g。该选项能够使用操纵体系的“原生格局(nativeformat)”天生调试信息。GDB能够间接使用这个信息。只管我们能够把-O和-g放在一同利用,可是,这类做法是极其不保举的。
假如你想用GDB来调试程序,那末你可使用-ggdb来让GCC为GDB天生更加丰厚的调试信息,可是,此时你就不克不及用其他的调试器来举行调试了。
最初要申明的是,下面这两个选项都能够承受一个输入调试信息的级别,默许的级别是2。假如你指定1级(-g1),那末GCC会天生起码的调试信息,这包含函数和全局变量的形貌信息,可是关于部分变量和行号等信息,在这个级别是不会输入的。别的一个级别是3级(-g3),在这一级别上,GCC会为程序中的一切宏界说和标记天生调试信息。
小结
经由过程这篇文章,但愿能过对想进修Linux开辟顶用到的一些基础的手艺和常识有一个懂得,而且可以本人下手入手下手做些实验性的事情,实在,这里另有良多成绩没有谈到,比方使用GDB举行调试、使用make办理工程、使用autoconf为程序天生设置剧本、使用CVS办理程序源文件等等,这些成绩有待在从此的文章中和读者一同交换
</p>
上一页1234


要多google,因为我不可能,也不可以给你解答所有内容,我只能告诉你一些关键点,甚至我会故意隐瞒答案,因为在寻找答案的过程中。
透明 该用户已被删除
5#
发表于 2015-1-18 16:51:07 | 只看该作者
我们这一代90后,从小接触的是windows98,家里条件好的自己有电脑装的是2000,后来又有了XP,上大学时又有了win7。
乐观 该用户已被删除
6#
发表于 2015-1-27 12:56:02 | 只看该作者
如果你有庞大而复杂的测试条件,尽量把它剪裁得越小越好。可能你会遇到这种情况,对于一个问题会出现不同内容回答,这时你需要通过实践来验证。
山那边是海 该用户已被删除
7#
发表于 2015-2-12 02:57:11 | 只看该作者
任何人都可以根据自己的喜好来定制适合自己的操作系统,Linux?是抢占式多任务多用户操作系统.
只想知道 该用户已被删除
8#
发表于 2015-3-2 22:25:24 | 只看该作者
直到学习Linux这门课以后,我才知道,原来我错了。?
小妖女 该用户已被删除
9#
发表于 2015-3-11 08:36:02 | 只看该作者
不同于Windows?系统需要花钱购买,因为Linux的核心是免费的,自由使用的,核心源代码是开放的。
老尸 该用户已被删除
10#
发表于 2015-3-18 07:39:23 | 只看该作者
甚至目前许多应用软件都是基于它的。可是没有哪一个系统是十分完美的。
11#
发表于 2015-3-25 19:16:55 | 只看该作者
如果上面的措施没有解决问题,此时你就需要Linux社区的帮助了。 Linux的使用者一般都是专业人士,他们有着很好的电脑背景且愿意协助他人。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-16 07:48

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表