设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

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

2012-3-31 15:03| 发布者: 红黑魂| 查看: 2888| 评论: 1|来自: csdn博客

摘要: 动态链接库不是linux独有的特性,在windows下面也存在这样的特性。一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的。和静态链接库相比,动态连接库可以共享内存资源 ...

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

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

[cpp] view plaincopy

#include "test.h"  

  

int add(int a, int b)  

{  

    return a + b;  

}  

    头文件格式,

[cpp] view plaincopy

#ifndef  _TEST_H  

#define  _TEST_H  

  

10 int add(int a, int b);  

11 #endif  

    此时如果我们想要生成动态库,要做的工作其实非常简单,输入gcc -shared -fPIC -o libtest.so test.c即可。回车后输入ls,我们就可以发现当前目录下面出现了libtest.so文件。

[cpp] view plaincopy

12 #include <stdio.h>  

13 #include "test.h"  

14   

15 int main()  

16 {  

17     printf("%d\n", add(2, 3));  

18     return 1;  

19 }  

    在上面的代码当中,我们发现使用到了add函数,那么此时如何才能生成一个执行文件呢?也很简单,输入gcc hello.c -o  hello ./libtest.so。然后输入./hello,此时可以验证一下执行文件运行是否正确。在编写静态库的时候,我说过静态库是汇编链接到执行文件当中的,而动态库不会。朋友们可以做个小实验,删除libtest.so,然后输入./hello。此时大家可以看看系统有没有错误返回?
    这个时候,有的朋友就会问了,那在windows下面dll应该怎么编写呢?其实也不难,只要在test.h上面稍作改变即可。其他的步骤和静态库的操作是基本类似的。

[cpp] view plaincopy

20 #ifndef  _TEST_H  

21 #define _TEST_H  

22   

23 #ifdef USR_DLL  

24 #define DLL_API _declspec(dllexport)  

25 #else  

26 #define DLL_API _declspec(dllimport)  

27 #endif  

28   

29 DLL_API int add(int a, int b);  

30   

31 #endif  


酷毙
2

雷人

鲜花

鸡蛋

漂亮

刚表态过的朋友 (2 人)

  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部