医院工程建设网站,邢台专业网站建设源码,台州网站建设惠店,建e室内设计网全景分类1.静态库与动态库概念 静态库#xff08;.a#xff09;#xff1a;程序在编译链接的时候把库的代码拷贝到可执行文件中。程序运行的时候将不再需要静态库。动态库#xff08;.so#xff09;#xff1a;程序在运行的时候才去链接动态库的代码#xff0c;多个程序共享使用… 1.静态库与动态库概念 静态库.a 程序在编译链接的时候把库的代码拷贝到可执行文件中。程序运行的时候将不再需要静态库。 动态库.so 程序在运行的时候才去链接动态库的代码多个程序共享使用库的代码。 注 1.一个与动态库链接的可执行文件仅仅包含它用到的函数入口地址的一个表而不是外部函数所在目标文件的整个机器码。也就是说如果可执行程序是动态链接生成的程序里面如果涉及到外部函数调用可执行程序中记录的是外部函数的地址外部函数具体的实现还在动态库中。 2.在可执行文件开始运行以前外部函数的机器码由操作系统从磁盘上的该动态库中复制到内存中这个过程称为动态链接dynamic linking。 3.动态库可以在多个程序间共享所以动态链接使得可执行文件更小节省了磁盘空间。操作系统采用虚拟内存机制允许物理内存中的一份动态库被要用到该库的所有进程共用节省了内存和磁盘空间。 2.生成动静态库
2.1.生成静态库 以往的写法 创建一个mklib目录在该目录下创建静态库。在mklib目录下创建mymath.h、mymath.c文件mymath.h文件写入下图一所示的代码mymath.c文件写入下图二所示的代码。 创建一个test.c文件写入下图三所示的代码创建makefile文件写入下图四所示的代码。使用make命令生成可执行程序然后使用./test执行该程序运行结果如下图五所示。 注在mymath.c文件中我们在for循环体内定义了i变量如果gcc版本低可能会报错如下图所示要解决该问题我们在makefile文件中生成可执行程序的gcc命令行后面带上-stdc99如下图二所示即采用c99标准进行编译。 静态库的写法 创建一个mklib目录在该目录下创建静态库。在mklib目录下创建mymath.h、mymath.c、myprint.h、myprint.c文件mymath.h文件写入下图一所示的代码mymath.c文件写入下图二所示的代码myprint.h文件写入下图三所示的代码myprint.c文件写入下图四所示的代码。 创建makefile文件写入下图五所示的代码 2.2.生成动态库