libtool可以帮助您连接多种程序的开发通道,该程序支持的数据类型是非常广泛的,在以前,编程人员想要利用共享库的优势来完成源代码的开发,需要建立不同的通道来支持代码运行的环境,同时需要设置对应的配置接口才能很好的完成源代码的开发,有了libtool以后,就可以将以上的问题全部简化,该软件能欧根据不同的主机类型设置兼容的通用接口,建立各种类型的源代码包共享库,从而简化了操作的流程,利用通用的接口设计程序,极大的节约了源代码包的开发时间。

软件功能
该libtool程序有以下概要:
libtool [ option ] ... [ mode-arg ] ...
并接受以下选项:
--config
显示libtool配置变量并退出。
--debug
将一个shell脚本执行的跟踪转储到标准输出。这会产生大量输出,因此您可能希望将其传递到less(或 more)或重定向到文件。
-n
- 干运行
不要创建,修改或删除任何文件,只显示libtool将执行什么命令。
- 特征
显示基本配置选项。这为包提供了一种确定是否将构建共享或静态库的方法。
与...一样 --mode = finish。-H
显示简短帮助消息。
显示帮助消息并退出。如果--mode = mode,则显示模式的详细帮助。
--help-all
显示常规选项的帮助以及每种操作模式的详细帮助,然后退出。
--mode = mode
使用模式作为操作模式。当从命令行使用libtool时,你可以给模式(或其唯一的缩写)作为第一个参数作为完整的 --mode = mode。
编译
将源文件编译为libtool对象。
执行
自动设置库路径,以便另一个程序可以使用卸载的libtool生成的程序或库。
链接
创建库或可执行文件。
安装
安装库或可执行文件。
完
在系统上完成libtool库的安装。
卸载
删除已安装的库或可执行文件。
清洁
删除已卸载的库或可执行文件。
软件特色
• 编译模式: 创建库对象文件。
• 链接模式: 生成可执行文件和库。
• 执行模式: 调试libtool生成的程序。
• 安装模式: 使图书馆和可执行文件公开。
• 完成模式: 完成库安装。
• 卸载模式: 删除已安装的可执行文件和库。
• 清洁模式: 删除卸载的可执行文件和库。
创建对象文件: 编译库的目标文件。
• 链接库: 从对象文件创建库。
• 链接可执行文件: 将对象文件链接到libtool库。
• 调试可执行文件: 在libtool生成的程序上运行GDB。
• 安装库: 使库可供用户使用。
• 安装可执行文件: 向用户提供程序。
• 静态库: 当不需要共享库。
使用方法
要从源文件创建目标文件,将使用调用编译器 -C 标志(和任何其他所需的标志):

上面的编译器命令产生一个目标文件,通常命名为 main.o,从源文件 main.c。
对于大多数库系统,创建成为静态库一部分的对象文件与创建链接形成可执行文件的对象文件一样简单:

然而,共享库只能从位置无关代码(PIC)构建 。因此,必须将特殊标志传递给编译器,以使其生成PIC而不是标准的位置相关代码。
由于这是一个库实现细节,libtool隐藏了PIC编译器标志的复杂性,并使用单独的库对象文件(PIC一个存在于 .libs子目录,静态目录位于当前目录中)。在没有共享库的系统上,不会创建PIC库对象文件,而在所有代码为PIC的系统(如AIX)上,不会创建静态的。
要创建库对象文件 foo.c 和 hello.c,只需使用标准编译命令作为参数调用libtool

请注意,libtool默默地在每个'编译'调用。的.lo文件是libtool对象,Libtool使用它来确定什么对象文件可以内置到共享库中。上 'a23',只支持静态库,所以库对象看起来像这样:

在共享库系统上,libtool通过将适当的PIC生成标志插入到编译命令中来自动生成一个附加的PIC对象:

注意Libtool自动创建 .libs 目录,其中将存储PIC库对象文件。
由于'汉堡包'支持共享库,并且需要PIC对象来构建它们,Libtool这次编译了一个PIC对象,并在libtool对象中记录了它:

注意,第二次运行的GCC的输出被丢弃。这样做使编译器警告不会烦人地复制。如果你需要看到两组警告(你可能有条件代码在'#ifdef PIC'例如),你可以关闭抑制与 - 禁止 libtool的编译模式选项:

相关介绍
实施问题
以下问题需要在任何可重用的共享库系统中解决,特别是libtool:
包安装程序应该能够控制构建什么类型的库。
运行其库尚未安装的动态链接程序可能很棘手。 LD_LIBRARY_PATH必须正确设置(如果支持),否则程序无法运行。
即使在不支持共享库的主机上,系统也必须始终如一地运行。
构建共享库所需的命令可能因主机而异。这些需要在配置时以一致的方式确定。
使用什么前缀或后缀来安装共享库并不总是很明显。这使得它很难Makefile 规则,因为它们通常假定文件名从主机到主机是相同的。
系统需要一个简单的库版本号抽象,以便共享库可以升级到位。程序员应该被告知如何设计库的接口以最大化二进制兼容性。
安装 Makefile目标应警告程序包安装程序设置正确的环境变量(LD_LIBRARY_PATH或等效),或运行ldconfig。
∨ 展开