linux动态链接库的创建与使用
使用linux动态链接库:
在Unix上存在两种库:动态库(.so)和静态库(.a),采用动态库(共享对象)技术可以方便程序间共享,节省程序占有空间,增加程序的可扩展性和灵活性。
操作动态库的函数在dlfcn.h文件中定义,所以要在使用动态库时include <dlfcn.h>
1. 打开动态链接库:dlopen,函数原型void *dlopen (const char *filename, int flag); dlopen用于打开指定名字(filename)的动态链接库,并返回操作句柄。比如,void *pHandle = dlopen(strSoFilePath, RTLD_LAZY);
2. 取动态对象地址:dlsym,函数原型为: void *dlsym(void *handle, char *symbol); dlsym根据动态链接库操作句柄(handle)与符号(symbol),返回符号对应的地址。注意使用这个函数不但获取函数地址,也可以获取变量地址。比如,假设我在so中定义了一个void mytest()函数,那在使用so时先申明一个函数指针:void (*pMytest)();然后使用dlsym函数将函数指针pMytest指向mytest函数,pMytest = (void (*)())dlsym(pHandle, "mytest");
3. 关闭动态链接库:dlclose,函数原型为: int dlclose (void *handle); 该函数将该.so的引用计数减一,当引用计数为0时,将它从系统中卸载。
4. 动态库错误函数:dlerror,函数原型为: const char *dlerror(void); 当动态链接库操作函数执行失败时,dlerror可以返回出错信息,返回值为NULL时表示没有错误信息。
在取到函数执行地址后,就可以在动态库的使用程序里面根据动态库提供的函数接口声明调用动态库里面的函数。在编写调用动态库的程序的makefile文件时,需要加入编译选项-ldl。
创建linux动态链接库:
从void *dlsym(void *handle, char *symbol); 的参数可以看出,该函数只传两个参数:一个指向so的handle和一个函数的symbol,所以so里面的函数应该不允许重载,否则根据一个symbol不能确定指向那个函数。为了兼容C和C++在so中定义函数时用extern "C",以下用例子说明如何创建linux动态链接库so文件。
//test.h
#ifdef __cplusplus
extern "C"
{
#endif
void mytest();
#ifdef __cplusplus
}
#endif
//test.c
#include <stdio.h>
#include "mytest.h"
void mytest()
{
printf("mytest ok in .so file\n");
}
//main.cpp
#include <dlfcn.h>
#inclu
相关文档:
Linux内核设备模型
翻译者:郭少悲
2009/12/01
原文:linux/Documentation/driver-model/overview.txt
概述
~~~~
Linux内核驱动模型是针对内核之前所有不同的驱动模型的统一抽象模型。它的目的是,通
过结合一套数据和操作集到一个全局可访问的数据结构里,从而添加基于某种指定总线的设
备和桥接驱动。
传统的驱动 ......
.tar
解包: tar xvf FileName.tar
打包:tar cvf FileName.tar DirName
(注:tar是打包,不是压缩!)
---------------------------------------------
.gz
解压1:gunzip FileName.gz
解压2:gzip -d FileName.gz
压缩:gzip FileName
.tar.gz
解压:tar zxvf FileName.tar.gz
压缩:tar zcvf FileName.tar ......
Linux下SVN服务器的搭建与配置
下载最新的svn压缩包
http://subversion.tigris.org/servlets/ProjectDocumentList?expandFolder=260&folderID=260
//解压SubVersion安装包 (root用户进行下面的操作) # tar xvzf subversion-1.4.5.tar.gz
//进入解压后的目录
# cd Subversion-1.4.5
//配置subversion安装
#./conf ......
本书全面介绍了Ubuntu Linux的相关知识,内容详实,论述清晰。主要内容包括Ubuntu介绍、文件系统管理、进程管理、压缩与查询系统、Shell应用、TCP/IP基础、网络管理、网络硬盘以及加密安全通信等内容。
本书是一本理论与实践并重的书籍,可作为专业人员的参考书籍,也适合于对Ubuntu ......
Info
Name
Version
Home URL(Download HOme)
Install Path
Remark
MySQL
5.1.35
http://dev.mysql.com/downloads/mysql/5.1.html#source
/usr/local/mysql
Install
[root@wzhu ~]# groupadd mysql
[root@wzhu ~]# useradd -g mysql -m -d /usr/local/mysql -r mysql
[root@wzhu ~]# tar zxf mys ......