linux下的C语言开发(动态库)
来源:互联网 发布:淘宝卖家邮费很便宜么 编辑:程序博客网 时间:2024/06/04 19:29
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】
这个时候,有的朋友就会问了,那在windows下面dll应该怎么编写呢?其实也不难,只要在test.h上面稍作改变即可。其他的步骤和静态库的操作是基本类似的。
动态链接库不是linux独有的特性,在windows下面也存在这样的特性。一般来说,windows下面的动态连接库是以*.dll作为结尾的,而linux下面的动态连接库是以*.so结尾的。和静态链接库相比,动态连接库可以共享内存资源,这样可以减少内存消耗。另外,动态连接是需要经过操作系统加载器的帮助才能被普通执行文件发现的,所以动态连接库可以减少链接的次数。有了这个特点,我们就不难发现为什么很多软件的补丁其实都是以动态库发布的。
那么,在Linux上动态库是怎么生成的呢?
#include "test.h"int add(int a, int b){ return a + b;}头文件格式,
#ifndef _TEST_H#define _TEST_Hint add(int a, int b);#endif此时如果我们想要生成动态库,要做的工作其实非常简单,输入gcc -shared -fPIC -o libtest.so test.c即可。回车后输入ls,我们就可以发现当前目录下面出现了libtest.so文件。
#include <stdio.h>#include "test.h"int main(){ printf("%d\n", add(2, 3)); return 1;}在上面的代码当中,我们发现使用到了add函数,那么此时如何才能生成一个执行文件呢?也很简单,输入gcc hello.c -o hello ./libtest.so。然后输入./hello,此时可以验证一下执行文件运行是否正确。在编写静态库的时候,我说过静态库是汇编链接到执行文件当中的,而动态库不会。朋友们可以做个小实验,删除libtest.so,然后输入./hello。此时大家可以看看系统有没有错误返回?
这个时候,有的朋友就会问了,那在windows下面dll应该怎么编写呢?其实也不难,只要在test.h上面稍作改变即可。其他的步骤和静态库的操作是基本类似的。
#ifndef _TEST_H#define _TEST_H#ifdef USR_DLL#define DLL_API _declspec(dllexport)#else#define DLL_API _declspec(dllimport)#endifDLL_API int add(int a, int b);#endif
作者:feixiaoxing 发表于2012-1-16 1:18:57 原文链接
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- 【转】linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库)
- linux下的C语言开发(动态库) 转载加原创
- Linux下的C语言开发(静态库和动态库)
- linux下的C语言开发(静态库)
- linux下的C语言开发(静态库)
- linux下的C语言开发(静态库)
- window.showModalDialog传值
- Ant学习笔记(解析build.xml文件)
- SQL Server 安装和使用时,常见错误
- AIX常见日志查看位置
- MingW安装
- linux下的C语言开发(动态库)
- ant 简介
- ALV Layout
- 7月11日关于设计多窗体共享数据的心得
- VS2010&AnkhSVN中断开SVN连接
- 网络安全 扫描器详解
- 一个和INSTALL_FAILED_INSUFFICIENT_STORAGE风马牛不相及的错误
- PHP 能做什么?
- Java获取当前类路径