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

文章分类:C++编程

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

最近的一个程序因为比较复杂,需要自己编写so动态链接库来给c语言程序调用。

下面就简单的写下so制作到调用的整个流程。

首先做个头文件

head.h:

C代码

1. /*

2. head.h

3.

4. */

5. #include

6. #include

7. void method_1(); //未设置参数

8. void method_2(char *s); // 设置了一个参数

/*

head.h

*/

#include

#include

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、付费专栏及课程。

余额充值