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下用gcc/g++生成静态库和动态库(Z)

Linux下用gcc/g++生成静态库和动态库(Z)   在 linux 下,库文件一般放在 /usr/lib 和 /lib 下, 静态库的名字一般为 libxxxx.a ,其...

linux下的静态库与动态库的区别

  • 2017年02月16日 15:34
  • 48KB
  • 下载

linux下静态库与动态库的生成与调用

转自:http://blog.csdn.net/nicebooks/article/details/6179286  首先,这里有2个概念:静态库,动态库. 静态库:      ...

学习笔记: linux下静态库与动态库的生成与调用

首先,这里有2个概念:静态库,动态库. 静态库:       是程序在链接时将静态库拷贝到可执行文件里,即生成可执行文件后,即使删除静态库,可执行文件仍可正常执行。 动态库:       也...

linux下如何使用gcc生成静态库和动态库

我们要想使用gcc来生成静态库和动态库,首先我们需要明白什么是静态库和动态库。 本质上来说库是一种 可执行代码的二进制形式,可以被操作系统载入内存执行。 linux中的库有两种: 静态库...

Linux下Gcc生成和使用静态库和动态库及相关问题总结

最近一阶段项目中编译过程中涉及到动态与静态库,从网上收集了一些资料,并做个总结。 一、基本概念 1.1 什么是库 在windows和linux平台下存在着大量的库。本质上来说库是一种可执行代码的二进...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux下的静态库和动态库生成
举报原因:
原因补充:

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