`

la文件和libtool

阅读更多

Linux下文件的类型是不依赖于其后缀名的,但一般来讲:
    .o,是目标文件,相当于windows中的.obj文件
    .so 为共享库,是shared object,用于动态连接的,和dll差不多
    .a为静态库,是好多个.o合在一起,用于静态连接
    .la为libtool自动生成的一些共享库,vi编辑查看,主要记录了一些配置信息。可以用如下命令查看*.la文件的格式   $file *.la

 

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

libtool主要的一个作用是在编译大型软件的过程中解决了库的依赖问题;将繁重的库依赖关系的维护工作承担下来,从而释放了程序员的人力资源。libtool提供统一的接口,隐藏了不同平台间库的名称的差异等细节,生成一个抽象的后缀名为la高层库libxx.la(其实是个文本文件),并将该库对其它库的依赖关系,都写在该la的文件中。该文件中的dependency_libs记录该库依赖的所有库(其中有些是以.la文件的形式加入的);libdir则指出了库的安装位置;library_names记录了共享库的名字;old_library记录了静态库的名字。 

当编译过程到link阶段的时候,如果有下面的命令: 

$libtool --mode=link gcc -o myprog -rpath /usr/lib –L/usr/lib –la 

libtool会到/usr/lib路径下去寻找liba.la,然后从中读取实际的共享库的名字(library_names中记录了该名字,比如liba.so)和路径(lib_dir中记录了,比如libdir=’/usr/lib’),返回诸如/usr/lib/liba.so的参数给激发出的gcc命令行。 

如果liba.so依赖于库/usr/lib/libb.so,则在liba.la中将会有dependency_libs=’-L/usr/lib -lb’或者dependency_libs=’/usr/lib/libb.la’的行,如果是前者,其将直接把“-L/usr/lib –lb”当作参数传给gcc命令行;如果是后者,libtool将从/usr/lib/libb.la中读取实际的libb.so的库名称和路径,然后组合成参数“/usr/lib/libb.so”传递给gcc命令行。 

当要生成的文件是诸如libmylib.la的时候,比如: 

$libtool --mode=link gcc -o libmylib.la -rpath /usr/lib –L/usr/lib –la 

其依赖的库的搜索基本类似,只是在这个时候会根据相应的规则生成相应的共享库和静态库。 

注意:(1)libtool在链接的时候只会涉及到后缀名为la的libtool文件;实际的库文件名称和库安装路径以及依赖关系是从该文件中读取的。 
(2)并不是所有的库都是用libtool编译的。 

 

分享到:
评论

相关推荐

    libtool-2.4.7

    解压命令tar -zxvf linux-tool-...libtool提供统一的接口,隐藏了不同平台间库的名称的差异等细节,生成一个抽象的后缀名为la高层库libxx.la(其实是个文本文件),并将该库对其它库的依赖关系,都写在该la的文件中。

    liunx 编译好的 GDAL3.2.0java调用)

    - ".lo"、".o"、".la"、".a"文件是编译过程中产生的中间文件,".lo"和".o"是对象文件,".la"是libtool的辅助文件,".a"是静态库。这些文件在正常部署时通常不需要,但可能在特定的编译或调试场景下有用。 - ".jar...

    jzmq的库文件

    4. **libjzmq.la**: 这是一个Libtool辅助文件,包含了关于库的信息,如版本号、依赖关系等。Libtool是一个帮助管理共享库的工具,它隐藏了不同操作系统之间的差异,简化了编译和链接过程。 5. **libjzmq.so**: 这是...

    libzmq库文件

    3. **libzmq.la**: 这是Libtool的元数据文件,用于管理动态库的版本信息和链接配置。Libtool是一个用于简化编译和链接过程的工具,它可以处理不同平台之间的差异,使得跨平台开发更加便捷。 4. **libzmq.so**: 这是...

    Wavepoint.la

    ".la"文件是libtool的一部分,存储了关于动态库的元数据,用于链接时的正确处理。 4. **编程语言**:"Wavepoint.la"项目可能是用各种编程语言编写的,比如C、C++、Python、Java等。具体使用哪种语言,需要查看解压...

    tslib移植

    Tslib是一个广泛应用于嵌入式系统的开源触摸屏管理库,它为触摸屏驱动和应用程序之间提供了一个中间层,简化了触摸屏的管理和使用。Tslib的核心功能包括:采样过滤、去抖动、校准以及坐标变换等。这些功能有助于提高...

    Ubuntu10.04下C连接mysql数据库[参考].pdf

    - `.la`:libtool编译出的库文件,通常记录了库的相关信息,仅在使用libtool时涉及。 5. **C连接MySQL**: - **连接到MySQL**:在终端输入`mysql -u root -p`,首次安装后,root用户通常没有密码,直接回车即可。...

    admesh for window

    "libadmesh.la"和"libadmesh.lai"是Libtool的配置文件,它们记录了库的属性和依赖关系,帮助编译系统正确地构建和链接程序。 **5. 使用ADMesh进行STL分析和优化** 使用ADMesh,用户可以执行以下操作: - **导入STL...

    autotools 多级目录build

    Libtool可以处理不同平台的库文件兼容性问题,并提供方便的接口来创建、链接和管理库。 **4. 多级目录构建** 在多级目录的项目中,每个子目录可能代表一个单独的模块或组件。每个目录下的Makefile.am需要明确其目标...

    log4cplus-2.0.5.tar.gz

    - `lib`目录:存放编译生成的库文件,如`.la`和`.so`,`.la`是libtool的链接辅助文件,`.so`是动态链接库文件。 - `src`目录(可能包含):源代码,如果你需要自定义编译或进行二次开发,这个目录将非常有用。 4....

    Ubuntu10.04下C连接mysql数据库.docx

    - `.la`:`libtool`编译的库文件,存储关于动态库和静态库的信息。 5. **C程序连接MySQL**: - 链接库时,可能需要静态库`.a`或动态库`.so`。静态库在编译时链接,而动态库在运行时链接。 - `mysql.h`头文件通常...

    安装glog和gflags

    /bin/bash ./libtool --mode=install /usr/bin/install -c libglog.la '/usr/local/lib' libtool: install: /usr/bin/install -c .libs/libglog.so.0.0.0 /usr/local/lib/libglog.so.0.0.0 ... ``` 这表明glog的相关...

    64位libjpeg.so.62

    libjpeg.la是Libtool的辅助文件,用于帮助构建过程管理和链接库。 在使用libjpeg.so.62时,开发者需要注意版本兼容性问题,确保其与应用程序和其他依赖库协调工作。同时,安全性和稳定性也是关注的重点,因为旧版本...

    libjpeg.so.62.0.0.rar

    一、先添加库libjpeg.so for arm: 交叉编译libjpeg 交叉编译工具 版本:3.4.1 路径:/usr/local/arm/3.4.1/bin ...2、将生成的可执行文件和libjpeg等三个库文件拷贝到板子上执行。ok,done!

    详解 linux c++的编译器g++的基本使用

    - `.la`:libtool生成的库文件,包含一些配置信息。 了解这些基本概念和使用技巧,将有助于在Linux环境下高效地使用G++编译器进行C++开发。希望本文能为读者提供有价值的帮助,感谢对技术的支持!

    PixTagger-开源

    7. **libdb-5.0.la**:这是一个链接库辅助文件,通常由libtool工具生成,包含关于库的信息,用于链接过程。 通过这些组件,PixTagger构建了一个高效且可扩展的图片管理解决方案,尤其是对于那些需要处理大量图片的...

    Supplements for libintl on Windows-开源

    6. `libintl.la`:这是一个用于GNU Libtool的配置文件,帮助管理库的构建过程。 7. `libintl.lib`:这是为MSVC编译器准备的静态库。 8. `libintl-win9x.lib`:同样是为了Windows 9x系统的MSVC编译器编译的静态库。 9...

    FuncBrowser GEdit Plugin-开源

    2. `libfuncbrowser.la`:这是一个Libtool库链接辅助文件,用于构建和管理动态链接库。在编译和安装插件时,这个文件会帮助系统正确地链接和加载插件所需的库。 3. `libfuncbrowser.so`:这是一个动态链接库文件,是...

Global site tag (gtag.js) - Google Analytics