欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    GCC详解文档格式.docx

    • 资源ID:22835916       资源大小:22.80KB        全文页数:11页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    GCC详解文档格式.docx

    1、“/usr/bin/ld: cannot find -lxxx”,也就是链接程序ld在那3个目录里找不到libxxx.so,这时另外一个参数-L就派上用场了,比如常用的X11的库,它放在/usr /X11R6/lib目录下,我们编译时就要用-L/usr/X11R6/lib - lX11参数,-L参数跟着的是库文件所在的目录名。再比如我们把libtest.so放在/aaa/bbb/ccc目录下,那链接参数就是-L/aaa /bbb/ccc -ltest。另外,大部分libxxxx.so只是一个链接,以RH9为例,比如libm.so它链接到/lib/libm.so.x,/lib /libm.so.

    2、6又链接到/lib/libm-2.3.2.so,如果没有这样的链接,还是会出错,因为ld只会找libxxxx.so,所以如果你要用到xxxx库,而只有libxxxx.so.x或者libxxxx-x.x.x.so,做一个链接就可以了ln -s libxxxx-x.x.x.so libxxxx.so手工来写链接参数总是很麻烦的,还好很多库开发包提供了生成链接参数的程序,名字一般叫xxxx-config,一般放在/usr/bin目录下,比如gtk1.2的链接参数生成程序是gtk-config,执行gtk-config -libs就能得到以下输出-L/usr/lib -L/usr/X11R6/lib

    3、-lgtk -lgdk -rdynamic -lgmodule -lglib -ldl -lXi -lXext -lX11 -lm,这就是编译一个gtk1.2程序所需的gtk链接参数,xxx-config除了-libs参数外还有一个参数是-cflags用来生成头文件包含目录的,也就是-I参数,在下面我们将会讲到。你可以试试执行gtk-config -libs -cflags,看看输出结果。现在的问题就是怎样用这些输出结果了,最笨的方法就是复制粘贴或者照抄,聪明的办法是在编译命令行里加入这个xxxx-config -libs - cflags,比如编译一个gtk程序:gcc gtktest.c

    4、gtk-config -libs -cflags这样就差不多了。注意不是单引号,而是1键左边那个键。除了xxx-config以外,现在新的开发包一般都用pkg-config来生成链接参数,使用方法跟xxx-config类似,但xxx-config是针对特定的开发包,但pkg-config包含很多开发包的链接参数的生成,用pkg-config -list-all命令可以列出所支持的所有开发包,pkg-config的用法就是pkg-config pagName -libs -cflags,其中pagName是包名,是pkg-config-list-all里列出名单中的一个,比如gtk1.2的名字就

    5、是gtk+,pkg-config gtk+ -libs -cflags的作用跟gtk-config -libs -cflags是一样的。比如:gcc gtktest.c pkg-config gtk+ -libs -cflags 。5。-include和-I参数-include用来包含头文件,但一般情况下包含头文件都在源码里用#include xxxxxx实现,-include参数很少用。-I参数是用来指定头文件目录,/usr/include目录一般是不用指定的,gcc知道去那里找,但是如果头文件不在/usr/include里我们就要用-I参数指定了,比如头文件放在/myinclude目录里,

    6、那编译命令行就要加上-I /myinclude参数了,如果不加你会得到一个xxxx.h: No such file or directory的错误。-I参数可以用相对路径,比如头文件在当前目录,可以用-I.来指定。上面我们提到的-cflags参数就是用来生成-I 参数的。6。-O参数这是一个程序优化参数,一般用-O2就是,用来优化程序用的,比如gcc test.c -O2,优化得到的程序比没优化的要小,执行速度可能也有所提高(我没有测试过)。7。-shared参数编译动态库时要用到,比如gcc -shared test.c -o libtest.so8。几个相关的环境变量PKG_CONFIG_

    7、PATH:用来指定pkg-config用到的pc文件的路径,默认是/usr/lib/pkgconfig,pc文件是文本文件,扩展名是.pc,里面定义开发包的安装路径,Libs参数和Cflags参数等等。CC:用来指定c编译器。CXX:用来指定cxx编译器。LIBS:跟上面的-libs作用差不多。CFLAGS:跟上面的-cflags作用差不多。CC,CXX,LIBS,CFLAGS手动编译时一般用不上,在做configure时有时用到,一般情况下不用管。环境变量设定方法:export ENV_NAME=xxxxxxxxxxxxxxxxx9。关于交叉编译交叉编译通俗地讲就是在一种平台上编译出能运行在

    8、体系结构不同的另一种平台上,比如在我们地PC平台(X86 CPU)上编译出能运行在sparc CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到sparc CPU平台上才能运行。当然两个平台用的都是linux。这种方法在异平台移植和嵌入式开发时用得非常普遍。相对与交叉编译,我们平常做的编译就叫本地编译,也就是在当前平台编译,编译得到的程序也是在本地执行。用来编译这种程序的编译器就叫交叉编译器,相对来说,用来做本地编译的就叫本地编译器,一般用的都是gcc,但这种gcc跟本地的gcc编译器是不一样的,需要在编译gcc时用特定的configure参数才能得到支持交叉编译的

    9、gcc。为了不跟本地编译器混淆,交叉编译器的名字一般都有前缀,比如sparc-xxxx-linux-gnu-gcc,sparc-xxxx-linux-gnu-g+ 等等10。交叉编译器的使用方法使用方法跟本地的gcc差不多,但有一点特殊的是:必须用-L和-I参数指定编译器用sparc系统的库和头文件,不能用本地(X86)的库(头文件有时可以用本地的)。例子:sparc-xxxx-linux-gnu-gcc test.c -L/path/to/sparcLib -I/path/to/sparcInclude_编译器gcc的简单用法说明: 用法: gcc OPTION file . 用-help可

    10、以得到更多帮助。常用选项:1) -o指定输出的文件,如果是一个文件的C程序不指定-o选项,则输出的文件是一个a.out的可执行文件,运行./a.out可以运行,注意LINUX下当前目录默认不在搜索路径下,所以运行当前目录的程序也必须加./ 。2) -c 只编译不连接,这样生成的程序如果不指定-o是file.o形式的文件,基本名字和C 程序的相同。有些程序可能包括很多个文件,需要将每个文件先编译成.o的文件,然后再连接在一起。3) -I 指定include搜索的路径。如-I/home/lxq/include即指定include搜索路径中加上/home/lxq/include。4) -L 指定库的

    11、搜索路径。如-L/home/lxq/libs即指定库的搜索路径中加上/home/lxq/libs。5) -l 指定所用到的库。Linux下的库文件一般是这种格式:静态库libxxxx.a,动态库libxxx.so,这样如果用到了某个库只需在编译的时候加上-lxxx即可。比如-lm,即包含数学库。6) -g 加入调试信息。加了这个选项之后生成的程序可以进行调试,但是可能程序的执行速度会受到影响。可能用-gdb3来代替,-gdb3加入的调试信息最多。7) -On 优化生成的目标代码。n是一个具体的数,如3。这样生成的程序没有调试信息加入不能进行调试,但是程序的效率比较高,对有些程序的执行速度可能会

    12、影响很大。 共有main.c func.c func.h 三个文件的程序其中main.c中有i nclude gcc -c main.c -o main.o gcc -c func.c -o func.o gcc main.o func.o -o main 这样就生成了main的可执行程序,当然这些工作用make来做便不用每次都敲这些命令3. make及Makefile的用法: make是用来管理工程文件的,系统自动检测变化的部分,并为这种变化采取适当的动作。make工作要有一个Makefile文件,下面介绍Makefile的文件格式及写法。当在一个目录下运行make命令时,系统自动找Make

    13、file或makefile,如果两者都没有,也可以用-f来指定。Makefile的基本规则是这样的: 目标:依赖程序执行命令1执行命令2. 比如上面的例子可以写成Makefile如下: main:main.o func.ogcc main.o func.o -o main main.o:main.cgcc -c main.c -o main.o func.o:func.c func.h注意此处必须是TAB键而不能是空格。可以在Makefile里定义变量,变量的引用用$()来表示,如下例,可参考相关书籍介绍#gcc and g+分别是gnu的c & c+编译器 gcc/g+在执行编译工作的时候,

    14、总共需要4步1.预处理,生成.i的文件预处理器cpp2.将预处理后的文件不转换成汇编语言,生成文件.s编译器egcs3.有汇编变为目标代码(机器代码)生成.o的文件汇编器as4.连接目标代码,生成可执行程序链接器ld参数详解-x language filename设定文件所使用的语言,使后缀名无效,对以后的多个有效.也就是根据约定C语言的后缀名称是.c的,而C+的后缀名是.C或者.cpp,如果你很个性,决定你的C代码文件的后缀名是.pig 哈哈,那你就要用这个参数,这个参数对他后面的文件名都起作用,除非到了下一个参数的使用。可以使用的参数吗有下面的这些c, objective-c, c-hea

    15、der, c+, cpp-output, assembler, and assembler-with-cpp.看到英文,应该可以理解的。例子用法:gcc -x c hello.pig-x none filename关掉上一个选项,也就是让gcc根据文件名后缀,自动识别文件类型gcc -x c hello.pig -x none hello2.c-c只激活预处理,编译,和汇编,也就是他只把程序做成obj文件gcc -c hello.c他将生成.o的obj文件-S只激活预处理和编译,就是指把文件编译成为汇编代码。例子用法gcc -S hello.c他将生成.s的汇编代码,你可以用文本编辑器察看-E

    16、只激活预处理,这个不生成文件,你需要把它重定向到一个输出文件里面.gcc -E hello.c ; pianoapan.txtgcc -E hello.c | more慢慢看吧,一个hello word 也要与处理成800行的代码-o制定目标名称,缺省的时候,gcc 编译出来的文件是a.out,很难听,如果你和我有同感,改掉它,哈哈gcc -o hello.exe hello.c (哦,windows用习惯了)gcc -o hello.asm -S hello.c-pipe使用管道代替编译中临时文件,在使用非gnu汇编工具的时候,可能有些问题gcc -pipe -o hello.exe hel

    17、lo.c-ansi关闭gnu c中与ansi c不兼容的特性,激活ansi c的专有特性(包括禁止一些asm inline typeof关键字,以及UNIX,vax等预处理宏,-fno-asm此选项实现ansi选项的功能的一部分,它禁止将asm,inline和typeof用作关键字。-fno-strict-prototype只对g+起作用,使用这个选项,g+将对不带参数的函数,都认为是没有显式的对参数的个数和类型说明,而不是没有参数.而gcc无论是否使用这个参数,都将对没有带参数的函数,认为城没有显式说明的类型-fthis-is-varialble就是向传统c+看齐,可以使用this当一般变量

    18、使用.-fcond-mismatch允许条件表达式的第二和第三参数类型不匹配,表达式的值将为void类型-funsigned-char-fno-signed-char-fsigned-char-fno-unsigned-char这四个参数是对char类型进行设置,决定将char类型设置成unsigned char(前两个参数)或者 signed char(后两个参数)-include file包含某个代码,简单来说,就是便以某个文件,需要另一个文件的时候,就可以用它设定,功能就相当于在代码中使用#include;gcc hello.c -include /root/pianopan.h-ima

    19、cros file将file文件的宏,扩展到gcc/g+的输入文件,宏定义本身并不出现在输入文件中-Dmacro相当于C语言中的#define macro-Dmacro=defn相当于C语言中的#define macro=defn-Umacro相当于C语言中的#undef macro-undef取消对任何非标准宏的定义-Idir在你是用#includefile的时候,gcc/g+会先在当前目录查找你所制定的头文件,如果没有找到,他回到缺省的头文件目录找,如果使用-I制定了目录,他回先在你所制定的目录查找,然后再按常规的顺序去找.对于#include;,gcc/g+会到-I制定的目录查找,查找不

    20、到,然后将到系统的缺省的头文件目录查找-I-就是取消前一个参数的功能,所以一般在-Idir之后使用-idirafter dir在-I的目录里面查找失败,讲到这个目录里面查找.-iprefix prefix-iwithprefix dir一般一起使用,当-I的目录查找失败,会到prefix+dir下查找-nostdinc使编译器不再系统缺省的头文件目录里面找头文件,一般和-I联合使用,明确限定头文件的位置-nostdin C+规定不在g+指定的标准路经中搜索,但仍在其他路径中搜索,.此选项在创libg+库使用-C在预处理的时候,不删除注释信息,一般和-E使用,有时候分析程序,用这个很方便的-M生

    21、成文件关联的信息。包含目标文件所依赖的所有源代码你可以用gcc -M hello.c来测试一下,很简单。-MM和上面的那个一样,但是它将忽略由#include;造成的依赖关系。-MD和-M相同,但是输出将导入到.d的文件里面-MMD和-MM相同,但是输出将导入到.d的文件里面-Wa,option此选项传递option给汇编程序;如果option中间有逗号,就将option分成多个选项,然后传递给会汇编程序-Wl.option此选项传递option给连接程序;如果option中间有逗号,就将option分成多个选项,然后传递给会连接程序.-llibrary制定编译的时候使用的库gcc -lcur

    22、ses hello.c使用ncurses库编译程序-Ldir制定编译的时候,搜索库的路径。比如你自己的库,可以用它制定目录,不然编译器将只在标准库的目录找。这个dir就是目录的名称。-O0-O1-O2-O3编译器的优化选项的4个级别,-O0表示没有优化,-O1为缺省值,-O3优化级别最高-g只是编译器,在编译的时候,产生调试信息。-gstabs此选项以stabs格式声称调试信息,但是不包括gdb调试信息.-gstabs+此选项以stabs格式声称调试信息,并且包含仅供gdb使用的额外调试信息.-ggdb此选项将尽可能的生成gdb的可以使用的调试信息.-static此选项将禁止使用动态库,所以,编译出来的东西,一般都很大,也不需要什么动态连接库,就可以运行.-share此选项将尽量使用动态库,所以生成文件比较小,但是需要系统由动态库.-traditional试图让编译器支持传统的C语言特性


    注意事项

    本文(GCC详解文档格式.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开