设为首页 加入收藏

TOP

Linux下使用动态链接库
2014-11-24 08:12:38 来源: 作者: 【 】 浏览:0
Tags:Linux 使用 动态 链接

Linux下使用动态链接库


方法一:使用dlopen打开库并使用dlsym调用动态库中函数


dll.c文件


#include
#include

int main()
{
void *libc = NULL;
void (*dll_x_printf)(char *str) = NULL;
char *err;


/* directly used function in libprintf.so, because we had linked */
//x_printf("direct used printf");


libc = dlopen("/home/wei.xuan/study/dll/libprintf.so", RTLD_NOW);
if (NULL != libc)
{
dll_x_printf = dlsym(libc, "x_printf");
if (NULL == dll_x_printf)
{
printf("can't find x_printf\n");
}
else
{
(*dll_x_printf)("hello, world\n")
}
dlclose(libc);
}
else
{
err = dlerror();
printf("libprintf.so failed! [%s]\n", err);
printf("open libprintf.so failed\n");
}
return 0;
}


libdll.c


#include

void x_printf(char *str)
{
if (NULL == str)
{
printf("string is null\n");
}
else
{
printf("%s\n", str);
}
return;
}


makefile


dll:dll.o libprintf.so
gcc -o dll dll.o -rdynamic -L. -ldl
dll.o:dll.c
gcc -c dll.c
libprintf.so:
gcc libdll.c -fPIC -shared -o libprintf.so
clean:
rm dll dll.o libprintf.so


三个文件dll.c的main函数调用libdll.c生成的so文件。


首先使用dlopen打开so库获取句柄,然后根据句柄调用dlsym获取想使用函数的地址,最后调用该函数。


这种方法在编译时不需要链接libprintf.so


方法二:编译时链接动态库


将makefile文件的dll:dll.o liprintf.so的指令该为


gcc -o dll dll.o -rdynmaic -L. -ldl -lprintf


如果makefile这么修改,则可在main中直接调用x_printf,即dll.c函数中注释部分。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Spring整合ActiveMQ 下一篇Android 编译boost动态库

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·“我用Java 8”已成 (2025-12-26 11:19:54)
·下载 IntelliJ IDEA (2025-12-26 11:19:52)
·Java是什么?(通俗 (2025-12-26 11:19:49)
·雾里看花:真正意义 (2025-12-26 10:54:36)
·C++——模板(超详细 (2025-12-26 10:54:34)