好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Linux系统共享库编程 - linux教程

Linux系统共享库编程

一、说明

类似Windows系统中的动态链接库,Linux中也有相应的共享库用以支持代码的复用。Windows中为*.dll,而Linux中为*.so。下面详细介绍如何创建、使用Linux的共享库。

二、创建共享库

在mytestso.c文件中,代码如下:

  • #include <stdio.h>  
  • #include <stdlib.h>  
  • int  GetMax( int  a,  int  b) 
  • if  (a >= b) 
  • return  a;  
  • return  b; 
  • int  GetInt( char * psztxt) 
  • if  (0 == psztxt) 
  • return  -1; 
  •  
  • return  atoi(psztxt); 
  • 然后使用下列命令进行编译:

    gcc -fpic -shared mytestso.c -o mytestso.so 

    -fpic 使输出的对象模块是按照可重定位地址方式生成的

    编译成功后,当前目录下有mytestso.so,此时已成功创建共享库mytestso.so。

    三、使用共享库

    共享库中的函数可被主程序加载并执行,但是不必编译时链接到主程序的目标文件中。主程序使用共享库中的函数时,需要事先知道所包含的函数的名称(字符串),然后根据其名称获得该函数的起始地址(函数指针),然后即可使用该函数指针使用该函数。

    在mytest.c文件中,代码如下:

  • #include <dlfcn.h>  
  • #include <stdio.h>  
  • int  main( int  argc,  char * argv[]) 
  • void * pdlhandle; 
  • char * pszerror; 
  •  
  • int  (*GetMax)( int  a,  int  b); 
  • int  (*GetInt)( char * psztxt); 
  •  
  • int  a, b; 
  • char * psztxt =  "1024"
  •  
  • // open mytestso.so  
  • pdlhandle = dlopen("./mytestso.so" , RTLD_LAZY); 
  • pszerror = dlerror(); 
  • if  (0 != pszerror) { 
  • printf("%sn" , pszerror); 
  • exit(1); 
  •  
  • // get GetMax func  
  • GetMax = dlsym(pdlhandle, "GetMax" ); 
  • pszerror = dlerror(); 
  • if  (0 != pszerror) { 
  • printf("%sn" , pszerror); 
  • exit(1); 
  •  
  • // get GetInt func  
  • GetInt = dlsym(pdlhandle, "GetInt" ); 
  • pszerror = dlerror(); 
  • if  (0 != pszerror) { 
  • printf("%sn" , pszerror); 
  • exit(1); 
  •  
  • // call fun  
  • a = 200; 
  • b = 600; 
  • printf("max=%dn" , GetMax(a, b)); 
  • printf("txt=%dn" , GetInt(psztxt)); 
  •  
  • // close mytestso.so  
  • dlclose(pdlhandle); 
  • 查看更多关于Linux系统共享库编程 - linux教程的详细内容...

  •   阅读:66次