快速业务通道

Linux静态/动态链接库的创建和使用

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-21

  和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 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号