首页 | 资讯动态 | linux基础 | 系统管理 | 网络管理 | 编程开发 | linux数据库 | 服务器技术 | linux相关 | linux认证 | 嵌入式 | 下载中心 | 专题 | linux招聘 | 镜像站
OKLinux中文技术站
·设为首页
·加入收藏
·联系我们
系统管理: 中文环境 系统管理 桌面应用 内核技术 | Linux基础: 基础入门 安装配置 常用命令 经验技巧 软件应用 | Linux数据库: Mysql Postgre Oracle DB2 Sybase other
网络管理: 网络安全 网络应用 Linux服务器 环境配置 黑客安全 | 编程开发: PHP CC++ Python Perl Shell 嵌入式开发 java jsp | PHP技术: PHP基础 PHP技巧 PHP应用 PHP文摘
Linux资讯 Linux招聘 Linux专题 Apache | Linux相关: 硬件相关 Linux解决方案 Linux认证 企业应用 其它Unix | 相关下载: 资料下载 参考手册 开发工具 服务器类 软路由 其它
 技术搜索:
会员中心 注册会员 高级搜索  
  → 当前位置:首页>linux基础>基础入门>正文

Linux操作系统中连接库的生成

http://www.oklinux.cn  2008-01-11  来源:  skid  会员收藏  游客收藏  【 】 

库有动态与静态两种,动态通常用.so为后缀,静态用.a为后缀。例如:libhello.so libhello.a

 

为了在同一系统中使用不同版本的库,可以在库文件名后加上版本号为后缀,例如: libhello.so.1.0,由于程序连接默认以.so为文件后缀名。所以为了使用这些库,通常使用建立符号连接的方式。

 

ln -s libhello.so.1.0 libhello.so.1

 

ln -s libhello.so.1 libhello.so

 

使用库

 

当要使用静态的程序库时,连接器会找出程序所需的函数,然后将它们拷贝到执行文件,由于这种拷贝是完整的,所以一旦连接成功,静态程序库也就不再需要了。然而,对动态库而言,就不是这样。动态库会在执行程序内留下一个标记‘指明当程序执行时,首先必须载入这个库。由于动态库节省空间,linux下进行连接的缺省操作是首先连接动态库,也就是说,如果同时存在静态和动态库,不特别指定的话,将与动态库相连接。

 

现在假设有一个叫hello的程序开发包,它提供一个静态库libhello.a 一个动态库libhello.so,一个头文件hello.h,头文件中提供sayhello()这个函数

 

/* hello.h */

 

void sayhello();

 

另外还有一些说明文档。这一个典型的程序开发包结构

 

1.与动态库连接

 

linux默认的就是与动态库连接,下面这段程序testlib.c使用hello库中的sayhello()函数

 

/*testlib.c*/

 

#include

 

#include

 

int main()

 

{

 

sayhello();

 

return 0;

 

}

 

使用如下命令进行编译

 

$gcc -c testlib.c -o testlib.o

 

用如下命令连接:

 

$gcc testlib.o -lhello -o testlib

 

在连接时要注意,假设libhello.o 和libhello.a都在缺省的库搜索路径下/usr/lib下,如果在其它位置要加上-L参数

 

2. 与静态库连接麻烦一些,主要是参数问题。还是上面的例子:

 

$gcc testlib.o -o testlib -WI,-Bstatic -lhello

 

注:这个特别的"-WI,-Bstatic"参数,实际上是传给了连接器ld.

 

指示它与静态库连接,如果系统中只有静态库当然就不需要这个参数了。

 

如果要和多个库相连接,而每个库的连接方式不一样,比如上面的程序既要和libhello进行静态连接,又要和libbye进行动态连接,其命令应为:

 

$gcc testlib.o -o testlib -WI,-Bstatic -lhello -WI,-Bdynamic –lbye

共2页: 上一页 1 [2] 下一页

上一篇:用Ubuntu Linux系统架设cacti监控服务器   下一篇:修正Ubuntu在格式化SWAP后不能休眠的问题


收藏于收藏夹】 【评论】 【推荐】 【打印】 【关闭
相关文档
·Linux操作系统默认打开文件数
·概括介绍Linux支持的文件系统
·Linux操作系统的错误诊断方法
·Linux系统下修改字符集的方法
·虚拟机中Linux不能引导的问题
·Linux操作系统的RPM使用详解
·Linux下如何解包和打包initrd image文件
·Linux系统下文件和文件夹的复制问题
·Ubuntu Linux系统下自启动选项设置方法
·Ubuntu Linux系统的启动过程
·关于Linux操作系统的网卡编译
·Linux系统的开机程序执行顺序
·Linux系统下如何查看及修改文件读写权限
·Linux系统平台下用Fdisk分区格式化硬盘
·Linux系统各个目录的一般作用
·关于Linux 内核中五个主要子系统的介绍
发表评论
密码: 匿名评论
评论内容:

(不超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规)
 
  最新文档
·Ubuntu Linux系统的启动过程
·Ubuntu Linux系统下自启动选项设置方法
·Linux系统下文件和文件夹的复制问题
·Linux下如何解包和打包initrd image文
·虚拟机中Linux不能引导的问题
·Linux系统下修改字符集的方法
·Linux操作系统默认打开文件数
·Linux操作系统的错误诊断方法
·概括介绍Linux支持的文件系统
·Linux操作系统的RPM使用详解
·关于Linux操作系统的网卡编译
·Linux系统的开机程序执行顺序
  阅读排行
·Linux的GRUB引导程序配置方法大全
·新手从零开始:Linux系统命令的使用
·Linux下tar bz gz等压缩包的压缩和解压
·从硬盘启动Desktop ISO所需的引导文件
·Linux系统面面观 PROC文件系统详细介绍
·Unix Shell程序编写的方法详解
·深入理解软件包的配置、编译与安装方法
·Linux操作系统下关于引导和初始化的问
·Linux操作系统的命令分类介绍
·Linux基础知识普及 理解GNU/Linux含义
·新手看招 Unix和Linux下C语言学习指南
·Linux命令Man解释Lilo:安装引导装载程
·Linux系统的文件属性详细解析(二)
·Linux下挂载硬盘光驱和U盘的方法
·在Redhat AS4中加载NTFS分区的方法详解
网摘收藏: