• 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 
  • 相关阅读:
    关于xml的使用。
    Input标签文件上传,使用详解
    webpack 集成 Typescript && Less
    ionic3 多级联动城市选择插件 ion-multi-picker
    ionic2(3) 密码键盘组件 ionic2-pincode-input 使用
    ionic3 图片(轮播)预览 ionic-gallary-modal组件使用方法
    ios打包,通过Xcode生成ipa文件
    php常见的验证方法
    php 时间转化为刚刚、几秒前、几分前、几天前等等,友好时间提示
    ionic node-sass安装或编译失败:MSBUILD : error MSB3428: 未能加载 Visual C++ 组件“VCBuild.exe”
  • 原文地址:https://www.cnblogs.com/zhangxuechao/p/11709973.html
Copyright © 2020-2023  润新知