静态库与共享库以及环境变量

一、静态库与共享库

1、什么是库文件?

库文件 就是 程序的打包,Unix和Windows中都使用了库文件。库文件分为:静态库和共享库(也叫动态库)。

2、静态库和动态库有什么区别?

静态库是代码的归档,每次使用代码时,会直接复制代码段到目标文件。

共享库是代码的集合,每次使用时不复制代码段,而是提供代码 的地址(函数指针)。

3、静态库和动态库的优缺点

静态库的优点:速度稍快,链接成功后,与库文件完全脱离

静态库的缺点:占用空间“非常”大,不利于修改和维护。

共享库的优点:占用空间小,修改和维护比较方便。

共享库的缺点:缺点速度稍慢,链接成功以后,目标文件和共享库文件必须存在才可以运行代码。

开发项目时,绝大多数使用共享库。因此,C程序员需要提供两样东西:共享库文件和头文件。

4、静态库的创建与使用

创建步骤:

1、写源程序,保存退出

2、编译为.o文件,gcc -c add.c

3、把所有的.o文件打包成静态库文件(lib库名.a)。

   ar -r libmyku.a add.o to.o ...

 

调用步骤:  

1、写调用代码,保存退出

2、编译调用代码为 .o 文件,gcc -c test.c

3、链接调用程序和静态库文件。有三种办法:

   a.直接连接法

     gcc test.o libmyku.a

   b.双L连接法

     gcc test.o -l库名 -L库所在目录

   c.单l连接法

     首先配置环境变量 LIBRARY_PATH ,把库文件目录配置进去

     gcc test.o -l库名

5、共享库文件的创建与使用

创建步骤:

1、写源程序,保存退出。

2、编译生成共享库文件。(共享库后缀.so)

   gcc -fpic -shared add.c -olibmyku.so (-fpic可以省略)

使用步骤:

    与静态库使用方法一样。

注:共享库在运行期间需要配置环境变量LD_LIBRARY_PATH才能找到。

(否则出现链接成功,运行失败的现象)。

使用ldd a.out 可以查看可执行文件关联的共享库文件信息。

系统提供了直接打开共享库的函数(代码中可以直接访问),可以了解以下,包括:

#include<dlfcn.h>

1、dlopen() --打开一个共享库文件

2、dlsym()  --从一个打开的共享库文件中找到一个函数,返回函数指针

3、dlclose()--关闭打开的文件

4、dlerror()--处理上面三个函数产生的错误。

 

二、环境变量与环境表

1、什么是环境变量?

环境变量(environment variables)一般是指在操作系统中用来指定操作系统运行环境的一些参数,如:临时文件夹位置和系统文件夹位置等。

环境变量是在操作系统中一个具有特定名字的对象,它包含了一个或者多个应用程序所将使用到的信息。例如Windows和DOS操作系统中的path环境变量,当要求系统运行一个程序而没有告诉它程序所在的完整路径时,系统除了在当前目录下面寻找此程序外,还应到path中指定的路径去找。用户通过设置环境变量,来更好的运行进程。

2、C语言中对环境变量的操作

C语言中,环境变量存在环境表中。环境表就是一个字符串的数组(字符指针数组)。char* arr[];大多数情况下,用char**代表环境表。

在程序中直接引用,“extern char** environ” 可以直接拿到环境表的首地址。environ以空字符串结尾。

系统提供了关于环境变量和环境表的函数

getenv() --可以通过环境变量的名字取得环境变量的值

putenv() setenv 可以新增和修改环境变量

putenv()存在必定修改,setenv存在可选是否修改

 

unsetenv --单删某个环境变量

clearenv --全部删除环境变量

猜你喜欢

转载自blog.csdn.net/qq_39545674/article/details/86436655