libtool编译
来源:互联网 发布:雷洋案 知乎 编辑:程序博客网 时间:2024/06/05 23:42
- 充分利用共享库的能力。libtool 是一个通用库支持脚本
- 我们可以认为libtool是gcc的一个抽象,也就是说,它包装了gcc或者其他的任何编译器,用户无需知道细节,只要告诉libtool说我需要要编译哪些库即可,并且,它只与libtool文件打交道,例如lo、la为后缀的文件
- 通常libtool是与GNU建构系统中的autoconf和automake这两个工具一起使用
- 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:
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/liblibtool: link: rm -fr .libs/libtest.la .libs/libtest.lai .libs/libtest.so .libs/libtest.so.0 .libs/libtest.so.0.0.0libtool: link: gcc -shared -fPIC -DPIC .libs/test.o -Wl,-soname -Wl,libtest.so.0 -o .libs/libtest.so.0.0.0libtool: 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.lalibtool: install: install .libs/libtest.so.0.0.0 /usr/local/lib/libtest.so.0.0.0libtool: 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.lalibtool: finish: PATH="/sbin:/bin:/usr/sbin:/usr/bin:/sbin" ldconfig -n /usr/local/lib
5. 运行
./libtool --mode=execute test
0 0
- libtool编译
- libtool编译
- 8、交叉编译libtool
- libtool
- libtool
- Libtool
- libtool
- libtool
- libtool
- libtool
- libtool
- 交叉编译中libtool相关的问题
- 避免交叉编译时,libtool 的雷区
- php 模块编译提示libtool出错
- 全志在编译时出现的error: Libtool library used but 'LIBTOOL' is undefined解决方案
- 交叉编译中pkg-config和libtool设置
- 编译gstreamer插件新发现和libtool的新认识
- 交叉编译中pkg-config和libtool设置
- 鸡啄米vc++2010系列28(列表视图控件List Control 下)
- iOS在自定义视图(常用于自定义cell)中获取导航控制器上面的当前的控制器对象
- bootstrap兼容IE9
- 初探 iOS8 中的 Size Class
- hdu 3635 Dragon Balls
- libtool编译
- 从MYSQL数据库随机取出数据
- Java 计算时间差之年龄问题
- C++ ofstream和ifstream详细用法
- Git版本控制器的主要操作
- C#操作mysql数据库的代码实例
- oracle数据库查询多行数据使用wmsys.wm_concat()合并
- java关键字
- Windows查找进程winAPI-CreateToolhelp32Snapshot