您所在位置:网站首页 > 海量文档
 > 计算机 > linux/Unix相关
Linux下动态链接库的创建和使用浅谈.pdf6页
本文档一共被下载:次,您可全文免费在线阅读后下载本文档。
下载提示
1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。
2.该文档所得收入(下载+内容+预览三)归上传者、原创者。
3.登录后可充值,立即自动返金币,充值渠道很便利
Linux 下动态链接库的创建和使用浅谈
李兴飞 2011-9-6
一直以来,我对Linux 下的动态链接库的理解比较模糊,由于要在工程中需要使用动态
链接库,所以这几天对这块进行了扫盲。我在学习Linux 环境下的动态使用时,是带着下面
三个问题进行的:
(1) 什么是动态链接库,作用是什么?
(2 ) 使用c 编写动态库,c 程序如何调用动态库?
(3 ) 使用c++编写动态库,c 程序如何调用动态库?
(4 ) 是否可以将c 和c++分别别写的代码一个整合到动态库中?
一、什么是动态链接库?作用是什么?
动态链接库是一个可以被其它应用程序共享的程序模块,其中封装了一些可以被共享的
例程和资源。动态链接库的扩展名是.so。
作用:使用动态链接库可以有效的利用空间和资源,使应用程序可以共享相同功能的代
码模块。
二、使用c 编写动态库,c 程序如何调用动态库?
下面采用例子介绍:
(1)首先编写动态链接库的对外暴露 API 的头文件test_c.h ,我们这里定义的API 是
test_c_api() 函数,代码如下:
>>>>>>>>>>>>>>>>>>>>>>
test_c.h
>>>>>>>>>>>>>>>>>>>>>>
#ifndef __TEST_C_H
#define __TEST_C_H
#include
void test_c_api();
#endif
动态链接库的实现部分,下边是一个打印hello word 的源代码:
>>>>>>>>>>>>>>>>>>>>>>
test_c.c
>>>>>>>>>>>>>>>>>>>>>>
#include "test_c.h"
void test_c_api()
{
printf("test_c hello word!\n");
}
(2 )编译生成动态链接库:gcc –c –fPIC test_c.c 产生test_c.o 目标文件
gcc –shared –o libtest.so test_c.o 生成动态链接库libtest.so
注意:-fPIC 选项的意思是产生于本地无关的代码
-shared 选项生产动态链接库
也可以直接使用gcc –fPIC –shared –o libtest.so test_c.c 生成动态链接库。
(3 )测试动态链接库
测试代码:
>>>>>>>>>>>>>>>>>>>>>>>>
test.c
>>>>>>>>>>>>>>>>>>>>>>>>
#include "test_c.h"// 包含动态链接库的头文件,其中定义了动态链接库暴露的所有API
int main()
{
test_c_api();//c 编写的动态链接库的API
return 0;
}
编译测试文件 gcc –o test test.c –I . –L . –ltest 生成可执行文件test
./test
注意: –I 头文件目录 –L 链接库的目录
使用C 程序调用C 编写的动态库是非常简单的。接下来我们看一下使用C 程序调用C++编写
的动态库。由于编译后的C++和C 函数命名规则的不同,导致C 不能直接调用C++编写的动
态链接库。在调用之前必须进行一些处理 (如:extern "C" )。
三、使用c++编写动态库,c 程序如何调用动态库?
同样使用例子介绍C 程序调用C++编写的动态链接库
(1)首先编写C++动态库的对C 开放API 的头文件test_cpp.h
>>>>>>>>>>>>>>>>>>>>>>>
test_cpp.h
>>>>>>>>>>>>>>>>>>>>>>>
#ifndef __TEST_CPP_H
#define __TEST_CPP_H
#ifdef __cplusplus
extern "C"{
#endif
void test_
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名:
验证码:
匿名?
发表评论