linux下的静态库和动态库生成

原创 2013年12月05日 20:50:00

静态库

       在linux环境中, 使用ar命令创建静态库文件.如下是命令的选项:

          d -----从指定的静态库文件中删除文件

          m -----把文件移动到指定的静态库文件中

          p -----把静态库文件中指定的文件输出到标准输出

          q -----快速地把文件追加到静态库文件中

          r -----把文件插入到静态库文件中

          t -----显示静态库文件中文件的列表

          x -----从静态库文件中提取文件

      还有多个修饰符修改以上基本选项,详细请man ar 以下列出三个:

          a -----把新的目标文件(*.o)添加到静态库文件中现有文件之后

          b -----***************************************之前

          v -----使用详细模式

ar 命令的命令行格式如下:

      ar [-]{dmpqrtx}[abcfilNoPsSuvV] [membername] [count] archive files...

参数archive定义库的名称, files是库文件中包含的目标文件的清单, 用空格分隔每个文件.

比如创建一个静态库文件的命令如下:

      ar -r libapue.a error.o errorlog.o lockreg.o

这样就了libapue.a静态库文件, 可以用 t 选项显示包含在库中的文件

      创建库文件之后,可以创建这个静态库文件的索引来帮助提高和库连接的其他程序的编译速度.使用ranlib程序创建库的索引,索引存放在库文件内部.

      ranlib libapue.a

用nm程序显示存档文件的索引,它可以显示目标文件的符号

nm libapue.a | more

如果是显示目标文件的符号:

nm error.o | more

如何使用呢?如下所示:

gcc -o test test.c libapue.a

这样就可以在test.c中调用在libapue.a中的函数了.

动态库

1.创建共享库

     gcc -shared -o libapue.so error.o errorlog.o

这样就创建了共享库!

2.编译共享库

    假设共享库位于当前目录(即跟程序文件相同的目录中)

gcc -o test -L. -lapue test.c

这样就编译出了不包含函数代码可执行文件了,但是但你运行时会发现linux动态加载器打不到libapue.so文件.

可以用ldd 命令查看可执行文件依赖什么共享库:

ldd test

如何才能让动态加载器发现库文件呢?有两种方法可以解决:

     LD_LIBRARY_PATH 环境变量  

     /etc/ld.so.conf文件

    1.环境变量

       export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:."

    2.修改/etc/ld.so.conf文件.位于/etc/ld.so.conf

一般应用程序的库文件不与系统库文件放在同一个目录下,一般把应用程序的共享库文件放在/usr/local/lib下,新建一个属于自己的目录apue,然后把刚才libapue.so复制过去就行了

同时在/etc/ld.so.conf中新增一行:

/usr/local/lib/apue

以后在编译程序时加上编译选项:

-L/usr/local/lib/apue -lapue

这样就可以使用这个libapue.so共享库了!!

本篇文章来源于 Linux公社网站(www.linuxidc.com)  原文链接:http://www.linuxidc.com/Linux/2011-01/31247.htm

linux下生成静态库和动态库

linux下生成静态库和动态库 一、动态库、静态库简介 库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。本质...
  • Ddreaming
  • Ddreaming
  • 2016年11月09日 22:25
  • 1557

Linux 如何生成静态库和动态库

1、引言1、linux下的库 静态库和共享库(动态库),二者的不同点在于代码被载入的时刻不同。 静态库的代码在编译过程中已经被载入可执行程序,因此体积较大。 共享库的代码是在可执行程序运行时才载...
  • xy010902100449
  • xy010902100449
  • 2015年08月20日 23:02
  • 2680

在Linux中生成C/C++动态库和静态库的方法

本文介绍在linux中生成动态库和静态库的方法,不同系统不同版本,生成的动态库和静态库可能无法使用。一、生成动态库的方法 在指定的文件目录下创建linux.cpp和linux.h文件 linux....
  • dacyren
  • dacyren
  • 2016年07月25日 20:43
  • 247

Linux下静态库与动态库(.a、.so)

首先讲一下error while loading shared libraries错误的解決方法 ./tests: error while loading shared libraries: x...
  • dumgeewang
  • dumgeewang
  • 2012年03月28日 15:22
  • 7561

linux静态库和动态库编译及使用

1 gcc编译文件时出现undefined reference to 'xxxx'的错误? 这是链接错误
  • renwotao2009
  • renwotao2009
  • 2014年10月28日 13:36
  • 2213

qt创建动态库,静态库

转自:http://tgstdj.blog.163.com/blog/static/748200402012929101434465/        其中有部分错误,但思路是对的 静态库...
  • fengxiuyaun
  • fengxiuyaun
  • 2015年03月27日 16:54
  • 592

Linux下gcc编译器生成和使用静态库和动态库学习笔记

我们通常把一些公用函数制作成函数库,供其它程序使用。函数库分为静态库和动态库两种。静态库在程序编译时会被连接到目标代码中,程序运行时将不再需要该静态库。动态库在程序编译时并不会被连接到目标代码中,而是...
  • arackethis
  • arackethis
  • 2015年01月31日 12:16
  • 2459

如何生成静态库和动态库

        对于一个编译型语言,编译器工作时总要经过预处理、编译、链接等几个过程。以 C/C++ 为例:预处理器(cpp)将每个 .c/.cpp 文件中 #include 的头文件都合并到 .c/...
  • MTK_kyle
  • MTK_kyle
  • 2008年04月23日 13:58
  • 13430

cmake同时生成动态库与静态库的方法

我的目录结构 顶层CMakeLists.txt src/CMakeLists.txt src/main/main.cpp src/main/CMakeLists.txt include/pe...
  • xp5xp6
  • xp5xp6
  • 2016年06月07日 13:16
  • 1519

android NDK学习篇2之two-libs——使用(单个)静态库生成动态库

下面以NDK提供的two-libs为例子,走一遍如何在jni层调用其他C文件的函数,原例子在second.c这个jni层文件中调用first.c里面的C函数。 通过Androi.mk文件编译生成一个动...
  • Sunnyfans
  • Sunnyfans
  • 2013年10月21日 21:56
  • 5234
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux下的静态库和动态库生成
举报原因:
原因补充:

(最多只允许输入30个字)