动态库一般以.so结尾,就是shared object的意思.


 其基本生成步骤为   ⑴编写函数代码   ⑵编译生成动态库文件,要加上 -shared 和 -fpic 选项 ,

     库文件名以lib开头, 以.so 结尾。     -fpic 使输出的对象模块是按照可重定位地址方式生成的。-shared指定把对应的源文件生成对应的动态链接库文件libstr.so文件。使用方式分为两种: 隐式调用和显示调用  隐式调用类似于静态库的使用,但需修改动态链接库的配置文件/etc/ld.so.conf;  显示调用则是在主程序里使用dlopen、dlsym、dlerror、dlclose等系统函数。


第一个简单的动态库编写:


-----------func.h----------- 


#include <stdio.h>

void ShowHello();


----------func.c-----------


#include "func.h"

void ShowHello()

{

    printf("show hello func called \n");

}

gcc -fpic -shared -o libTest2.so  func.c   生成 动态库 libTest2.so


动态库显示调用:


------------uselib.c-----------------------

#include <dlfcn.h>

#include "func.h" 

#include <stdio.h>

int main()

{

    void(*pFun)();

    void* pdHandle=dlopen("/mnt/hgfs/LinuxShare/cplus/TestLib2/libTest2.so",RTLD_LAZY);

    if(!pdHandle)

    {

printf("dlopen failed \n");

return -1;

    }

    char* errCh=dlerror();

    if(NULL!=errCh)

    {

       printf("dlerror \n");

       return -1;

    }

    pFun=dlsym(pdHandle,"ShowHello");

    errCh=dlerror();

    if(NULL!=errCh)

    {

       printf("dlerror2 \n");

       return -1;

    }

    (*pFun)();

    dlclose(pdHandle);

    return 0;

}


通过命令  gcc -o uselib -ldl uselib.c  编译生成可执行文件 uselib    -ldl  选项表示 用到了共享库


./uselib  执行 可打印出    show hello func called  

————————————————

版权声明:本文为博主「mtour」的原创文章。