gcc入门(下)

Linux开采工具之gcc,开垦工具gcc

linux开采工具一.gcc入门(上)  1.gcc相关定义  gcc(GNU C
Compiler)编写翻译器,最早帮忙C语言,现已帮衬C、C++、Java、帕斯Carl、艾达、COBOL语言等;帮衬各种硬件平台; 
gcc不仅是本土编辑器,他还是可以够跨平台交叉编写翻译; 
gcc有多种语言前端,用于分析差别的言语; 
gcc是模块化设计的,能够步向新语言和新CPU架构的协理;  gcc是自由软件; 
2.gcc编写翻译主次进度暗意图hello.c–>预管理(cpp)hello.i–>编写翻译器(ccl)hello.s–>汇编器(as)hello.o,printf.o–>链接器(ld)hello源程序(文本)->被涂改的源程序(文本)->汇编制程序序(文本)->可重一向目的程序(二进制)->可进行指标程序(二进制)#gcc
-E(预管理宏定义的进展) hello.c -o hello.i(目的文件)#gcc -s(编译)
hello.i -o hello.s#gcc -c(汇编) hello.s -o
hello.o(布告gcc打消链接步骤,即编写翻译源码并在最生平成指标文件)#gcc
hello.o -o hello#./hellohello叁回到位#gcc hello.c -o hello#gcc -c
hello.c(只到第三步,不参与链接)3.-Wall的使用,制止产生预想的错误,出错提示#gcc
-Wall hello.c -o
hello精确的动静下不提示,错误提醒4.模块化编写翻译:#include<stdio.h>void
hellofn();void main();七个函数文件的编写翻译链接#gcc -Wall hellofn.c main.c
-o
man#lsmain#./mainhello同样也得以,将七个文本都生成链接文件,链接生成靶子文件#gcc
-Wall -c hellofn.c -o hellofn.o#gcc -Wall -c main.c -o main.o#gcc
-Wall hellofn.o main.o -o
main#lsmain#./mainhello假设在那之中二个文书发出更改,只须求编写翻译一部分就可以;借使工程中有看不尽,独立编写翻译的文本,则须要树立makfile的本子实行大范围的编写翻译;小结:gcc的定义gcc的本性gcc编写翻译进度gcc常用选项gcc编写翻译多文本二、gcc入门(下)01.头文件与库文件 
在利用c语言和别的语言进行程序设计的时候,我们须要头文件来提供对常数的定义和对系统函数库调用的扬言。 
库文件是有些预编写翻译好的函数集结,哪些函数都以比照可选拔原则编写制定。它们平时由一组相关联的用来达成某项常见专门的工作的函数构成。比如用来拍卖显示屏突显情状的函数(ncurses库)和数据库访谈例程(dbm库)等。02.行使外界库(-l选项)//calc.c#include<math.h>#include<stdio.h>int
main(void){ double x = pow(2.0,3.0); printf(“The cubed is %f\n”,x);
return 0;}#gcc -Wall calc.c -o calc -lm#ls /usr/lib/libm.a#ls
 /usr/lib/libm.so03.静态库与共享库静态库(.a):程序在编写翻译链接的时候把库的代码链接到可试行文件中。程序在运作的时候将不再须求静态库。动态库(.so或.sa):程序在运转的时候才去链接分享的代码,八个程序分享利用库的代码。 多个与分享库链接的可推行文件仅仅包罗它采纳的函数入口地址的贰个表,而不是外表函数所在目的文件的百分之百机器码。 
在可实施文件开头运维在此之前,外部函数的机器码有操作系统从磁盘上的该分享库中复制到内部存储器中,那么些进度称为动态链接(dynamic
linking) 
分享库能够在七个程序间分享,全体动态链接使用得可实施文件更加小,节省了磁盘空间。操作系统选拔设想内部存款和储蓄器机制允许物理内存中的一根分享库被要用到该库的持有进程公用,节省了内部存款和储蓄器和磁盘空间。04.生成静态库ar(gnu归档工具)
rcs(replace and create)比如:#ar rcs libhello.a hello_fn.o#gcc
-Wall main.c libhello.a -o main#./mainhello world!!!#gcc -Wall main.o
-o main -lhello(libhello可简写为lhello)/usr/bin/ld:cannot find
-lhello#gcc -Wall-L.(在此时此刻路径下寻觅lhello这么些库)在链接生成main可实施文件后,lhello.a静态库文件可以去除#rm
lhello.a#./mainhello world!!!#vi ~/.bash_profileexport LIBRARY PATH =
/(钦赐处境变量,到该目录下寻觅库)05.生成共享库shared:表示生成分享库格式fPIC:发生地点非亲非故码(position
independent)#gcc -shared -fPIC hello_fn.o -o
libhello.so#lslibhello.so#gcc -Wall -L. main.o -o main
-lhello(静态库与分享库同偶尔候设一时,优先调用分享库)#cp main
/tmp#./main./main error:……第一种艺术:#cp libhello.so
/usr/lib#./mainhello
world!!!第二种方法:改动LD_LIBRARY_PATH(当前客商)#vi
~/.bash_profile扩大该公文路线第三种办法:ldconfig,配置ld.so.conf,ldconfig更新ld.so.cache#vi
/etc/ld.so.conf(修改路线)#ldconfig(更新命令)#ldd
main(main程序包涵了怎样库)#ldd
hello(hello蕴涵了如何库)小结:使用外界库:-lhello静态库与共享库:二种方法生成静态库生成动态库

 

linux开垦工具一.gcc入门(上) 1.gcc相关定义 gcc(GNU C
Compiler)编写翻译器,最早帮忙C语言,现已支持C、C++、Java、…

接纳分享库
I:连接分享库,只要库名就可以
L:链接库所在的不二等秘书技
gcc -Wall -L. main.c -o main  -lhello

2,生成汇编代码

2,生成汇编代码

生产静态库
ar rcs libhello.a  hello_fn.o  :多少个.o文件生成.a静态库 
ar是GNU归档工具,rcs表示replace and create
利用那几个库
gcc -Wall -L. main.c -o main -lhello  
(lib可省略.-L.表示库文件地点在当前目录下,不然在系统目录下搜寻)

三个用c语言写的前后相继把她编写翻译成Computer可推行的文书,一般有4个步骤

3,编写翻译汇编

库找寻路线:
C_INCLUDE_PATH 、LIBRARY_PATH
从左到右寻觅-I(钦定头文件寻觅路线) -L(钦赐库的搜索路线)内定的目录
由遭受变量内定的目录
由系统内定的目录

 

gcc helloworld.o -o helloworld

三  静态库与分享库
静态库(.a):程序在编写翻译链接的时候把库的代码链接到可实践文件中,程序运营的时候将不再要求静态库
动态库(.so或.sa):程序运行的时候才去链接分享库代码,五个程序分享利用库的代码

gcc常用选项意义:

  1. -o output_filename
    明确可推行文件的名目为output_filename。假如不提交这一个选项,gcc就交由预设的可实施文件名a.out。

  2. -c
    只编写翻译,不链接成为可实践文件,编写翻译器只是由输入的.c等源文件生成.o为后缀的对象文件。

  3. -g
    产生调节和测量检验工具(gdb)所不可或缺的号子新闻,要想对编写翻译出的次第开展调治,就亟须投入那么些选项。

  4. -ldirname
    将dirname所建议的目录参与到程序头文件目录列表中。

  5. -Ldirname
    将dirname所建议的目录参加到库文件的目录列表中。

6. -Wall
转换全体警告新闻。

 

二个用c语言写的程序把她编译成Computer可实践的文书,一般有4个步骤

发表评论

电子邮件地址不会被公开。 必填项已用*标注