linux C 链接库 so制作及调用[转]

文章分类:C++编程

[文章作者:陈毓端 若转载请标注原文链接:http://blog.woyuw.com/?p=341]

最近的一个程序因为比较复杂,需要自己编写so动态链接库来给c语言程序调用。
下面就简单的写下so制作到调用的整个流程。
首先做个头文件

head.h:
C代码

1. /*
2. head.h
3.
4. */
5. #include <stdio.h>
6. #include <stdlib.h>
7. void method_1(); //未设置参数
8. void method_2(char *s); // 设置了一个参数

/*
head.h

*/
#include <stdio.h>
#include <stdlib.h>
void method_1(); //未设置参数
void method_2(char *s); // 设置了一个参数



method_1.c:
C代码

1. /*
2. method_1.c
3. */
4. #include "head.h"
5. void method_1()
6. {
7. printf("我是陈毓端,您执行的是方法1(method_1)");
8. }

/*
method_1.c
*/
#include "head.h"
void method_1()
{
printf("我是陈毓端,您执行的是方法1(method_1)");
}



method_2.c
C代码

1. /*
2. method_2.c
3. */
4. #include "head.h"
5. void method_2(char *s)
6. {
7. printf("我是陈毓端,您执行的是方法2(method_2):%s",s);
8. }

/*
method_2.c
*/
#include "head.h"
void method_2(char *s)
{
printf("我是陈毓端,您执行的是方法2(method_2):%s",s);
}



关键一步,生成so(动态链接库)
Shell代码

1. gcc head.h method_1.c method_2.c -fPIC -shared -o method.so

gcc head.h method_1.c method_2.c -fPIC -shared -o method.so



到现在 method.so 文件已经制做完毕。

接下来是调用
work_so.c:
C代码

1. #include "stdio.h"
2. #include "stdlib.h"
3. #include "dlfcn.h"
4. int main()
5. {
6. void *SoLib;
7. int (*So)();
8. SoLib=dlopen("./method.so",RTLD_LAZY); //加载method.so
9. So = dlsym( SoLib, "method_1"); //声名method_1方法
10. (*So)( "" ); //执行method_1方法
11.
12. So = dlsym(SoLib, "method_2");
13. (*So)( "method_2" ); //设置参数
14. }

#include "stdio.h"
#include "stdlib.h"
#include "dlfcn.h"
int main()
{
void *SoLib;
int (*So)();
SoLib=dlopen("./method.so",RTLD_LAZY); //加载method.so
So = dlsym( SoLib, "method_1"); //声名method_1方法
(*So)( "" ); //执行method_1方法

So = dlsym(SoLib, "method_2");
(*So)( "method_2" ); //设置参数
}



编译 :
Shell代码

1. gcc work_so.c -o word_so -ldl

gcc work_so.c -o word_so -ldl

不出意外 结果为:
我是陈毓端,您执行的是方法1(method_1)我是陈毓端,您执行的是方法1(method_2):method_2

好了这个流程完毕。







===============================万恶的分割线=========================
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值