linux下的C语言开发(动态库)

原文网址:http://blog.csdn.net/feixiaoxing/article/details/7203441


动态链接库不是linux独有的特性,在windows下面也存在这样的特性。一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的。和静态链接库相比,动态连接库可以共享内存资源,这样可以减少内存消耗。另外,动态连接是需要经过操作系统加载器的帮助才能被普通执行文件发现的,所以动态连接库可以减少链接的次数。有了这个特点,我们就不难发现为什么很多软件的补丁其实都是以动态库发布的。

    那么,在Linux上动态库是怎么生成的呢?

[cpp]  view plain copy
  1. #include "test.h"  
  2.   
  3. int add(int a, int b)  
  4. {  
  5.     return a + b;  
  6. }  
    头文件格式,

[cpp]  view plain copy
  1. #ifndef  _TEST_H  
  2. #define  _TEST_H  
  3.   
  4. int add(int a, int b);  
  5. #endif  
    此时如果我们想要生成动态库,要做的工作其实非常简单,输入gcc -shared -fPIC -o libtest.so test.c即可。回车后输入ls,我们就可以发现当前目录下面出现了libtest.so文件。
[cpp]  view plain copy
  1. #include <stdio.h>  
  2. #include "test.h"  
  3.   
  4. int main()  
  5. {  
  6.     printf("%d\n", add(2, 3));  
  7.     return 1;  
  8. }  
    在上面的代码当中,我们发现使用到了add函数,那么此时如何才能生成一个执行文件呢?也很简单,输入gcc hello.c -o  hello ./libtest.so。然后输入./hello,此时可以验证一下执行文件运行是否正确。在编写静态库的时候,我说过静态库是汇编链接到执行文件当中的,而动态库不会。朋友们可以做个小实验,删除libtest.so,然后输入./hello。此时大家可以看看系统有没有错误返回?
    这个时候,有的朋友就会问了,那在windows下面dll应该怎么编写呢?其实也不难,只要在test.h上面稍作改变即可。其他的步骤和 静态库 的操作是基本类似的。
[cpp]  view plain copy
  1. #ifndef  _TEST_H  
  2. #define _TEST_H  
  3.   
  4. #ifdef USR_DLL  
  5. #define DLL_API _declspec(dllexport)  
  6. #else  
  7. #define DLL_API _declspec(dllimport)  
  8. #endif  
  9.   
  10. DLL_API int add(int a, int b);  
  11.   
  12. #endif  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值