libtool编译
1.充分利用共享库的能力。libtool 是一个通用库支持脚本
2.我们可以认为libtool是gcc的一个抽象,也就是说,它包装了gcc或者其他的任何编译器,用户无需知道细节,只要告诉libtool说我需要要编译哪些库即可,并且,它只与libtool文件打交道,例如lo、la为后缀的文件
3.通常libtool是与GNU建构系统中的autoconf和automake这两个工具一起使用
4.libtool生成一个抽象的后缀名为la高层库libxx.la(其实是个文本文件),并将该库对其它库的依赖关系,都写在该la的文件中。该文件中的dependency_libs记录该库依赖的所有库(其中有些是以.la文件的形式加入的);libdir则指出了库的安装位置;library_names记录了共享库的名字;old_library记录了静态库的名字
1. 编译
# ./libtool --mode=compile --tag=CC $(CC) -I./include -c test.c //compile编译
//结果
./libtool --mode=compile --tag=CC cc -I./include -c test.c
libtool: compile: cc -c test.c -fPIC -DPIC -o .libs/test.o
# ./libtool --mode=compile --tag=CC mipsel-linux-gcc -I./include -c test.c
2. 交叉编译需要tag
| Language name | Tag name |
|---|---|
| C | CC |
| C++ | CXX |
| Java | GCJ |
| Fortran 77 | F77 |
| Windows Resource | RC |
3. 编译库文件
./libtool --mode=link --tag=CC $(CC) -o libtest.la test.lo -I./include -rpath /usr/local/lib
//结果
./libtool --mode=link --tag=CC cc -o libtest.la test.lo -I./include -rpath /usr/local/lib
libtool: link: rm -fr .libs/libtest.la .libs/libtest.lai .libs/libtest.so .libs/libtest.so.0 .libs/libtest.so.0.0.0
libtool: link: gcc -shared -fPIC -DPIC .libs/test.o -Wl,-soname -Wl,libtest.so.0 -o .libs/libtest.so.0.0.0
libtool: link: (cd ".libs" && rm -f "libtest.so.0" && ln -s "libtest.so.0.0.0" "libtest.so.0")
libtool: link: (cd ".libs" && rm -f "libtest.so" && ln -s "libtest.so.0.0.0" "libtest.so")
libtool: link: ( cd ".libs" && rm -f "libtest.la" && ln -s "../libtest.la" "libtest.la" )
在一些旧版本的系统上,ranlib负责把静态库转换为其他的某种格式,使得新的库能够更快的链接;现在ar命令已经包含了上述功能;
为了兼容性,在makefile中还是保留ranlib
//如果报错
libtool: link: libtool library `dmproc.la' must begin with `lib'
-module //可以解决此问题
3. 编译可执行文件
./libtool --mode=link --tag=CC $(CC) -o test test.lo libtest.la
//结果
./libtool --mode=link --tag=CC cc -o test test.lo libtest.la
libtool: link: cc -o .libs/test .libs/test.o ./.libs/libtest.so -Wl,-rpath -Wl,/usr/local/lib
4. 安装
./libtool --mode=install install libtest.la /usr/local/lib/libtest.la
//结果
./libtool --mode=install install libtest.la /usr/local/lib/libtest.la
libtool: install: install .libs/libtest.so.0.0.0 /usr/local/lib/libtest.so.0.0.0
libtool: install: (cd /usr/local/lib && { ln -s -f libtest.so.0.0.0 libtest.so.0 || { rm -f libtest.so.0 && ln -s libtest.so.0.0.0 libtest.so.0; }; })
libtool: install: (cd /usr/local/lib && { ln -s -f libtest.so.0.0.0 libtest.so || { rm -f libtest.so && ln -s libtest.so.0.0.0 libtest.so; }; })
libtool: install: install .libs/libtest.lai /usr/local/lib/libtest.la
libtool: finish: PATH="/sbin:/bin:/usr/sbin:/usr/bin:/sbin" ldconfig -n /usr/local/lib
5. 运行
./libtool --mode=execute test
libtool编译的更多相关文章
- 大型项目使用Automake/Autoconf完成编译配置
http://www.cnblogs.com/xf-linux-arm-java-android/p/3590770.htmlhttp://blog.csdn.net/zengraoli/articl ...
- [转] libtool的作用及应用
今天使用 autoconf 的时候遇到一个 libtool 的问题,觉得这个东西挺有意思,找了个文档过来,暂时记录. 转自:http://blog.csdn.net/larntin2002/artic ...
- libtool工具的使用
http://blog.sina.com.cn/s/blog_602f87700100fc8t.html libtool作用: libtool 是一个通用库支持脚本(/usr/bin/libtool) ...
- 使用autoconf完成编译配置
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefi ...
- libtool的工作原理
libtool 是一个通用库支持脚本,将使用动态库的复杂性隐藏在统一.可移植的接口中:使用libtool的标准方法,可以在不同平台上创建并调用动态库.可以认为libtool是gcc的一个抽象,其包装了 ...
- Linux下编译安装Memcache
需要gcc,make,cmake,autoconf,libtool等工具,联网后,yum install -y gcc,make,cmake,autoconf,libtool 编译安装libevent ...
- 大型项目使用Automake/Autoconf完成编译配置(标准的编译过程已经变成了简单的三部曲:configure/make/make install,)
使用过开源C/C++项目的同学们都知道,标准的编译过程已经变成了简单的三部曲:configure/make/make install, 使用起来很方便,不像平时自己写代码,要手写一堆复杂的Makefi ...
- nginx编译安装以及配置tcp转发
依赖包安装 yum -y install gcc gcc-c++ make automake autoconf pcre pcre-devel zlib zlib-devel openssl open ...
- libtool
[从网上摘录的,忘了从哪摘的了] libtool常见于autoconf/automake,单独用的例子很少,所以我想仔细研究一下,为将来兄弟们看起来方便. 一.libtool的作用offer a ...
随机推荐
- putty 配色方案
putty 配色方案 修改地点: Default Foreground: 255/255/255 Default Background: 51/51/51 ANSI Black: 77/77/77 A ...
- B/S架构与C/S架构(略讲)
B/S架构基本概念 B/S是Browser/Server,即浏览器/服务器架构.Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现. B/S三层体系结构可以定义为 ...
- OC方法交换swizzle详细介绍——不再有盲点
原文链接:https://www.cnblogs.com/mddblog/p/11105450.html 如果对方法交换已经比较熟悉,可以跳过整体介绍,直接看常见问题部分 整体介绍 方法交换是runt ...
- jQuery中的属性(四)
1. attr(name|properties|key,value|fn), 设置或返回被选元素的属性值 参数说明: name:属性名称 properties:作为属性的“名/值对”对象 key,va ...
- 正睿暑期培训day3考试
链接 A 可以发现一个小棍的贡献是使得左右两列上的球位置互换.所以只要找出哪两个球会经过当前位置,然后swap一下就行了.. 考场上调了2.5h,依然没过样例.赛后发现忘了排序!!!!... /* * ...
- A1089 Insert or Merge (25 分)
一.技术总结 看到是一个two pointers问题,核心是要理解插入排序和归并排序的实现原理,然后判断最后实现 可以知道a数组和b数组怎么样判断是插入排序还是归并排序,因为插入排序是来一个排一个,所 ...
- Python连载22-调试&单元测试
一.调试技术 (1)调试流程:单元测试->集成测试->交测试部 (2)分类:i.静态调试(说白了就是看代码,看看有没有错):ii.动态测试 1.pdb调试 相关连接:https://b ...
- 1+x 证书 Web 前端开发 CSS3 专项练习
官方QQ群 1+x 证书 Web 前端开发 CSS3 专项练习 http://blog.zh66.club/index.php/archives/196/
- 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...
- Linux 网络通信 API详解【转载】
TCP/IP分层模型 OSI协议参考模型,它是基于国际标准化组织(ISO)的建议发展起来的, 它分为7个层次:应用层.表示层.会话层.传输层.网络层.数据链路层及物理层. 这个7层的协议模型虽然规定得 ...