求助,c语言调用so文件

xiejiaguitian 2012-02-29 12:05:11
要求用c语言写一个调用so文件的程序: 该程序中有一个循环(循环600次),每次循环启动一个线程,该线程去调用so文件。
请帖个例子程序,多谢了!
...全文
589 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
pathuang68 2012-03-01
  • 打赏
  • 举报
回复
恨天低 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuchao35758600 的回复:]

用dlopen函数打开你要使用的so动态库
用dlsym函数获取该动态库中你指定的函数的函数指针
使用这个函数指针即可实现函数的调用
用dlclose函数关闭动态库

编译源代码时,如果是gcc编译器,加上编译选项: -ldl
意思是编译时链接dl库,因为上面3个函数是dl库里的。
[/Quote]

++
xiejiaguitian 2012-02-29
  • 打赏
  • 举报
回复
麻烦帮忙写个例子吧! 我是做java的,现在急着要做到这样的一个程序
灼眼的超哥 2012-02-29
  • 打赏
  • 举报
回复
用dlopen函数打开你要使用的so动态库
用dlsym函数获取该动态库中你指定的函数的函数指针
使用这个函数指针即可实现函数的调用
用dlclose函数关闭动态库

编译源代码时,如果是gcc编译器,加上编译选项: -ldl
意思是编译时链接dl库,因为上面3个函数是dl库里的。
xiejiaguitian 2012-02-29
  • 打赏
  • 举报
回复
动态库。用来加密的
oldm4n 2012-02-29
  • 打赏
  • 举报
回复
so文件?动态库吗?
man dlopen
man dlsym
man dlclose

或者 google 这3个dl*
hk2305621_1 2012-02-29
  • 打赏
  • 举报
回复
so库 libtest.so

int max(int a, int b)
{
return a > b ? a : b;
}


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


#include <dlfcn.h>

int main(void)
{
int max = 0;
int (*fun)(int, int);
void* handle = dlopen("libtest.so", RTLD_LAZY);
if (NULL == handle)
return -1;
fun = dlsym(handle, "max");

max = fun(3, 5);

dlclose(handle);

return 0;
}


暮雨晨舟 2012-02-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 liuchao35758600 的回复:]
用dlopen函数打开你要使用的so动态库
用dlsym函数获取该动态库中你指定的函数的函数指针
使用这个函数指针即可实现函数的调用
用dlclose函数关闭动态库

编译源代码时,如果是gcc编译器,加上编译选项: -ldl
意思是编译时链接dl库,因为上面3个函数是dl库里的。
[/Quote]

比较详细
yanran_hill 2012-02-29
  • 打赏
  • 举报
回复
最简单的做法是把so当成.o文件,ld的时候直接生成执行文件就行了
xiejiaguitian 2012-02-29
  • 打赏
  • 举报
回复
x1307191882@126.com
jxnuzhouguohong 2012-02-29
  • 打赏
  • 举报
回复
LZ留邮箱,晚上发给你
oldm4n 2012-02-29
  • 打赏
  • 举报
回复
编译选项如下:
gcc -g -Wall -o dl dl.c -ldl
oldm4n 2012-02-29
  • 打赏
  • 举报
回复
下述代码动态加载了系统的 libc.so.6 库,获取 printf 的入口地址,并使用函数指针调用之,如下

#include <dlfcn.h>

typedef int (* pf_printf)(const char *format, ...);

int main(void)
{
void* handle = dlopen("libc.so.6", RTLD_LAZY);
if (! handle) return -1;

dlerror();
pf_printf mypf = (pf_printf)dlsym(handle, "printf");

if(0 != dlerror()) return -2;

mypf("this is a test\n");

dlclose(handle);

return 0;
}

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧