在学习点

1、CPATH或C_INCLUDE_PATH              //存放自动加载头文件的位置
     用逗号分隔的目录列表,以提供头文件的搜索位置。
     相当于在使用gcc或g++是,-Idirectory。(头文件所在的位置)!
 
 
2、COMPILER_PATH                              //gcc和g++子程序的位置
      用逗号隔开的目录列表,以提供gcc或g++子程序的搜索位置。
 
3、GCC_EXEC_PERFIX
      ....
 
4、LIBRARY_PATH                                  //自动搜索库的路径
     用逗号隔开的目录列表,以提供链接器寻找连接库(动态连接库,静态连接库)的位置。
     相当于在命令里使用-Ldirectory
 
5、LD_LIBRARY_PATH                           //动态搜索加载动态库的路径
     用逗号隔开的目录列表,用来提供共享连接库(动态连接库)文件的搜索位置。这个环境变量是程序在执行是使用的。
     ldd   ./可执行程序名
     将看到可执行程序在执行时连接动态库的过程。
 
6、TMPATH                                            //gcc或g++编译过程中,临时文件存放的目录
      gcc编译过程中临时文件使用的目录。
 

      动态加载库和动态链接库都是.so库。
      不同之处就是加载的方法不同。
 
动态加载库和一般的动态连接库不同:
        一般的动态连接库是在程序启动的时候就要在动态连接库中寻找需要的函数。
        而动态加载库可以用程序的方法来控制什么时候加载。
动态连接库:

        程序在启动的时候,在LD_LIBRARY_PATH环境变量中寻找动态连接库。

可以使用ldd命令查看一个程序在启动时加载的动态连接库。

动态加载库:

       动态加载库可以在程序中控制什么时候加载,动态加载库常用的函数主要有:

       #include <dcfcn.h>                           //动态加载库头文件。

      //打开动态加载库

       void * dlopen(const char *filename,int flag);

                 filename是动态加载库的完整路径。

                 flag一般取值为:RTLD_LASY

                 返回值是一个handle,即指针(句柄)

       作用:打开动态加载库。返回值为库的指针。

 

       //获取函数指针

       void * dlsym(void *handle,char *symbol);

               handle是ldopen函数的返回值,即打开动态加载库后的指针。

               symbol为函数的名称。

               返回值为函数指针。

 

       dlclose()用来关闭句柄。

       dlerror()用来帮助进行出错处理。

 

 

 

你可能感兴趣的:(学习)