Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 

ReadMe.md

libtool快速入门

简介

​ libtool是一个通用库支持脚本,将使用动态库的复杂性隐藏在统一、可移植的接口中;使用libtool的标准方法,可以在不同平台上创建并调用动态库。可以认为libtool是gcc的一个抽象,其包装了gcc(或者其他的编译器),用户无需知道细节,只要告诉libtool需要编译哪些库即可,libtool将处理库的依赖等细节。libtool只与后缀名为lo、la的libtool文件打交道。

​ **libtool主要的一个作用是在编译大型软件的过程中解决了库的依赖问题;将繁重的库依赖关系的维护工作承担下来,从而释放了程序员的人力资源。**libtool提供统一的接口,隐藏了不同平台间库的名称的差异等细节,生成一个抽象的后缀名为la高层库libxx.la(其实是个文本文件),并将该库对其它库的依赖关系,都写在该la的文件中。

.lo文件
使用libtool编译出的目标文件,其实就是在o文件中添加了一些信息
.la文件
使用libtool编译出的静态库文件
.lai文件
使用libtool编译出的库文件,其实是个文本文件,记录同名动态库和静态库的相关信息

安装

sudo apt install libtool-bin

使用

1:创建object文件
libtool --mode=compile gcc -g -O -c foo.c

libtool编译出两个版本的object,一个是fPIC(位置无关的),放在.libs目录下;另一个则是普通的,放在本地。

2:生成动态库
libtool --mode=link --tag=CC gcc -g -O -o libfoo.la -rpath /usr/local/lib foo.lo

link出两个共享库,一个是static,一个则是dynamic;需要注意的是,-rpath必须有才能产生dynamic库来,如果用-static,则只创建static库。

3:安装动态库
libtool --mode=install cp libhello.la /usr/local/lib/libhello.la
libtool --mode=install install -c libhello.la /usr/local/lib/libhello.la
两个命令都可以,效果相同
4: 链接可执行程序
# 参数 hello.O文件
libtool --mode=compile gcc -g -O -c hello.c
libtool --mode=link gcc -g -O -o hello hello.lo -rpath /usr/local/lib libfoo.la
5:安装可执行程序
libtool --mode=install cp hello /usr/local/bin/hello
6: 运行
libtool --mode=execute hello

参考资料