一,静态库
什么是静态库?
静态库有什么优点?
(1)编译时把静态库中的相关代码复制到可执行文件中,运行时不需要链接库
(2)程序运行时无需加载库,运行速度快(优点)。
(3)占用更多的磁盘和内存空间,静态库升级后,程序需要重新编译,库升级不方便(缺点)
创建静态库
(1)编写代码
需编写主函数文件,头文件,还有功能函数文件
主函数文件:
#include "mkdir.h"
int main()
{
int count =0;
count = manyfile();
printf("count = %d",count);
}
头文件:
#ifndef MKDIR_H
#define MKDIR_H
#include<stdio.h>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>
int manyfile();
#endif
例子:库没有头文件的,所以需要封装一下:
函数功能:
#include "mkdir.h"
int manyfile()
{
//实现打开最多.txt文件
char arr[30] = {0};
int count = 0;
while(1)
{
sprintf(arr,"%d.txt",count);
int fw = open(arr,O_RDONLY | O_CREAT,0664);
if(fw < 0)
{
perror("open error");
break;
}
count++;
}
// printf("%d",count);
//
return count-1;
}
2、将源代码编译生成相对应的.o文件
3、静态库的命名规范lib静态库名.a
ar :库文件维护程序的名称
c:创建一个库,不管是否存在,都将创建
r:在库中插入模块
s:创建目标文件索引,这个在创建较大的库的时候能加快时间
4.编译
在编译时只用主函数文件链接功能函数文件,而头文件不需链接,头文件相当于一个中转站。
注:gcc 主函数文件 -o 自定义的名字 -L. 上一步生成的库 (将 lib 简写为了 l) 。
5.运行
(运行的是你上一步自定义的名字)
二、什么是动态库?他又有什么优点呢?
共享库是为了增强灵活性,LabVIEW能够调用并创建外部代码程序,并把这些程序集成到可执行程序中。事实上,一个共享程序库就是一个共享函数库,应用程序可以在运行时连接到该程序库,而不是在编译时连接。在Windows中,共享程序库被称为动态链接库;在Mac OS X系统中,称为framework;在Linux中称为共享目标。在LabVIEW中可以使用Call Library函数调用共享库。还可以告诉LabVIEW,将VI编译为共享库,供其他类型的代码使用。
他的优点:
(1)编译时仅记录使用哪个共享库(动态库)中的哪个符号(函数),不复制共享库中的相关代码,运行时加载共享库
(2)程序不包含库中的代码,代码尺寸小(优点)
(3)库升级方便,无需重新编译(优点)
(4)使用更广泛
创建共享库
1、编写源代码
还是之前的代码
2、-fPIC 生成与位置无关代码,可以在任何位置执行
3、创建共享库
共享库的命名规范
lib库名.so.版本号(数字)
4、创建软链接
创建软链接的目的时为了能够让我们的编译器在编译的时候找到共享库
5、链接共享库
6、运行
出现上述原因因为在运行共享库的时候系统默认是在系统库路径( /usr/lib)下查找的
7.将共享库复制到系统库路径下 /usr/lib
需要重新编译然后再执行
注:本文有bug,将main,c拷贝到别的目录下执行的时候,需要在引用处加上头文件的位置。或者将头文件也一并拷来。