Linux静态/动态链接库的创建和使用
和Windows系统一样Linux也有静态/动态链接库,下面介绍创建和使用方法: 假设有下面几个文件: 头文件String.h,声明相关函数原形,内容如下: Strlen.c:函数Strlen的实现,获取给定字符串的长度,内容如下: Strlnen.c:函数StrNlen的实现,获取给定字符串的长度,如果输入字符串的长度大于指定的最大长度,则返回最大长度,否者返回字符串的实际长度,内容如下: 生成静态库: 利用GCC生成对应目标文件: gcc –c Strlen.c Strnlen.c 如果对应的文件没有错误,gcc会对文件进行编译生成Strlen.o和Strnlen.o两个目标文件(相当于windows下的obj文件).然后用ar创建一个名字为libstr.a的库文件,并把Strlen.o 和Strnlen.o的内容插入到对应的库文件中.,相关命令如下: ar –rc libstr.a Strlen.o Strnlen.o 命令执行成功以后,对应的静态库libstr.a已经成功生成. /*********************************** Filename : String.h Description : Author : HCJ Date : 2006-5-7 ************************************/ int Strlen(char *pStr); int StrNlen(char *pStr, unsigned long ulMaxLen); /************************************** Filename : get string length Description : Author : HCJ Date : 2006/5/7 **************************************/ #include<stdio.h> #include<assert.h> int Strlen(char *pStr) { unsigned long ulLength; assert(NULL != pStr); ulLength = 0; while(*pStr ) { ulLength ; } return ulLength; } ********************************************** Fileneme: mystrnlen.c Description: get input string length,if string large max length input return max length, else real length Author: HCJ Date : 2006-5-7 **********************************************/ #include<stdio.h> #include<assert.h> int StrNlen(char *pStr, unsigned long ulMaxLen) { unsigned long ulLength; assert(NULL != pStr); if(ulMaxLen <= 0) { printf("Wrong Max Length!n"); return -1; } ulLength = 0; while(*pStr && ulLength < ulMaxLen) { ulLength ; } return ulLength; } 生成动态链接库: gcc -fpic -shared -o libstr.so Strlen.c Strnlen.c -fpic 使输出的对象模块是按照可重定位地址方式生成的. -shared指定把对应的源文件生成对应的动态链接库文件libstr.so文件. 对应的链接库已经生成,下面看一下如何使用对应的链接库. 静态库的使用: 假设有下面的文件要使用对应的的静态库: 编译生成对应的目标文件: gcc -c -I/home/hcj/xxxxxxxx main.c 生成可执行文件: gcc -o main1 -L/home/hcj/xxxxxxxx main.o libstr.a
其中-I/home/hcj/xxxxxxxx和-L/home/hcj/xxxxxxxx是通过-I和-L指定对应的头文件和库文件的路径.libstr.a是对应的静态库的名称.这样对应的静态库已经编译到对应的可执行程序中.执行对应的可执行文件便可以对应得函数调用的结果. /***************************************** FileName: main.c Description: test static/dynamic library Author: HCJ Date : 2005-5-7 ** |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |