linux 下动态库使用示例

linux调用库的方式有三种:
1.静态链接库
2.动态链接库
3.动态加载库
其中1,2都是在编程时直接调用,在链接时加参数-l进行链接
第三种需要在编程时使用dlopen等函数来获取库里面函数的定义,然后进行调用.
不过对于没有提供头文件的动态库,只能dlopen等函数来调用

 gcc getmaxlen.c -fPIC -shared -o libtest.so

gcc main.c -ldl -g

#include <stdio.h>
#include <dlfcn.h> // 显式加载需要用到的头文件

int  main()
{
    void *pdlHandle = dlopen("./libtest.so", RTLD_LAZY); // RTLD_LAZY 延迟加载
	int ret;
    char *pszErr = dlerror();
	int array[]={11,5,8,13,9,5};
	
    if( !pdlHandle || pszErr )
    {
        printf("Load mylib failed!\n");
        return 1;
    }

	// int getMaxLen(int *sel,int N)
    int (*Print)(int *,int) = dlsym(pdlHandle, "getMaxLen"); // 定位动态链接库中的函数
    if( !Print )
    {
        pszErr = dlerror();
        printf("Find symbol failed!%s\n", pszErr);
        dlclose(pdlHandle);
        return 1;
    }

	printf("Print 0x%x\n", (int*) Print);
    ret = Print(array, sizeof (array)/sizeof(int)); // 调用动态链接库中的函数

    dlclose(pdlHandle); // 系统动态链接库引用数减1
    printf("result %d\n", ret);
    return ret;
}

猜你喜欢

转载自blog.csdn.net/zhongyunde/article/details/50411437