Ubuntu下编制程序景况GNU安装

静态链接库是在编译时刻由链接器使用的库文件,1.编译源码,gcc -c(汇编) hello.s -o,hello.o -o hello,Turbo C的,       GCC跟Turbo

金沙澳门官网7817网址 1

静态链接库是在编写翻译时刻由链接器使用的库文件,Linux下默许后缀名字为.a的文本为静态库.静态库出现首借使为了有利于调用一些常用的函数。

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

linux开辟工具一.gcc入门(上)  1.gcc相关定义  gcc(GNU C
Compiler)编写翻译器,最初协助C语言,现已扶助C、C++、Java、帕斯Carl、Ada、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#金沙澳门官网7817网址,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 LIBRA宝马X5Y 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、…

ubuntu下C编程

重在有两步:

 

1.编写翻译源码

条件搭建

2.制作库

      其实,linux下写C也是很轻易的。IDE的话用 eclipse 集成 CDT
模块就行了。当然那属于重量级的了,就不啻VC++之于windows同样。那有未有像Turbo
C那样的小工具呢,主要也等于用到它的编写翻译功效。恩,那就是这一次大家要说的
GCC 了。
       依据 wikipedia (google)上的定义,GCC(GNU Compiler
Collection,GNU编写翻译器套装),是一套由GNU开荒的编制程序语言编译器。它是GNU
toolchain的基本点部分,亦是开放源代码的类Unix操作系统的行业内部编写翻译器。
       GCC跟Turbo
C的管理进程一模一样,其由C语言源代码文件生成可推行文件的进度不仅仅是编写翻译的进程,而是要经历两个互相关系的步骤∶预管理(也称预编译,Preprocessing)、编写翻译(Compilation)、汇编(Assembly)和三番五次(Linking)。所以,基本上能够这么说,用过
Turbo C的,很轻易就能习贯GCC了。

=====================================

 

以三个简单的源码为例,示范静态库制作的具体流程

Description:

1.编写翻译源码

不知道该如何做获取锁 /var/lib/dpkg/lock – open (11 Resource temporarily
unavailable)

hello_first.c

Unable to lock the administration directory (/var/lib/dpkg/), is another
process using it?

void hello_first(void)
{
 printf(“hello first”);
}

 

hello_second.c

Solution:

void hello_second(void)
{
 printf(“hello second”);
}

sudo rm /var/cache/apt/archives/lock

编译:

sudo rm var/lib/dpkg/lock

gcc -c hello_first.c -o hello_first.o

 

gcc -c hello_second.c -o hello_second.o

 

2.制作静态库

      
好了,未来我们来写个大约的主次吗。首先是安装GCC,若是你使用的是Ubuntu,则在终极中输入以下命令来设置GCC。
      
安装好GCC就能够写程序了?别急,现在GCC什么文件都还不可能编写翻译呢。还记得在Turbo
C上大家不是还要设置头文件的路线吗?是的,我们需求设置那么些头文件,这正是build-
essential软件包。安装好那几个包,系统就能够活动安装上g++,libc6-dev,linux-libc-dev,libstdc++6-4.1-
dev等部分必须的软件和头文件的库。大家得以在终极中输入上面发号施令来安装:
sudo apt-get install
build-essential

ar -r  libhello.a hello_first.o hello_second.o

设置vim的编纂工具

切实调用库实例

sudo
apt-get installvim-full

hello_main.c

好了,情状搭建达成,就让大家开首起初写程序吗。

#include <stdio.h>

C 编制程序中有关文书后缀

void hello_first(void);

.a     静态库 (archive)
.c     C源代码(必要编写翻译预管理)
.h     C源代码头文件
.i     C源代码(不需编写翻译预管理)
.o     对象文件
.s     汇编语言代码
.so     动态库

void hello_second(void);

单个源文件生成可实行程序

int main()
{
 hello_first();
 hello_second();
 return 0;
}

上面是七个简便的“hello, ubuntu”程序的源代码(用 gedit 或者 vi
写下这些顺序,并保留为helloubuntu.c):

编译:

#include
int main(int argc,char *argv[])
{
 printf(“hello, ubuntu\n”);
 
 return 0;
}

先是种格局:

最简易直接的编写翻译该代码为可实行程序的不二诀假如,将该代码保存为文件
helloubuntu.c,并实践以下命令:

gcc hello_main.c libhello.a -o hello_main

$ gcc -Wall helloubuntu.c
 

其次中艺术:

编译器通过检查命令行中钦点的文件的后缀名可识别其为 C 源代码文件。GCC
默许的动作:编译源代码文件生成对象文件(object
file),链接对象文件获得可试行程序,删除对象文件。由于命令行中未钦赐可实行程序的文书名,编写翻译器采取暗中同意的
a.out。在命令行中输入程序名可使其实践并展现结果:

拷贝libhello.a到/lib目录下

$ ./a.out
hello, ubuntu

gcc hello_main.c -lhello -o hello_main2

挑选 -o 用来内定所生成的可施行程序的公文名。上面包车型大巴指令生成名称为helloubuntu 的可实施程序:

运营截图:

$ gcc -Wall helloubuntu.c -o helloubuntu

金沙澳门官网7817网址 1

在命令行中输入程序主力使其实行,如下:

OK!静态库调用成功!!

$ ./helloubuntu
hello, ubuntu

思考:

源文件生成对象文件