libtool 中的 .la 文件说明

21 篇文章 7 订阅
18 篇文章 0 订阅

libtool 中的 .la 文件说明

1 概述

在 Linux 系统中,libtool 是一个用于自动化编译和链接复杂软件项目的工具,特别是那些使用了共享库(.so 文件在 Linux 上,.dylib 在 macOS 上)的项目。它帮助处理各种编译器和链接器的复杂性,包括不同平台上的差异。

.la 文件是 libtool 生成的库文件的链接文件(libtool archive)。这些文件不是实际的库文件,而是包含了关于如何链接到相应库的信息的文本文件。它们对于 libtool 和一些依赖于 libtool 的工具(如 ldconfig)来说很重要,因为它们帮助这些工具找到并链接到正确的库文件。1

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

在使用 libtool 构建的库中,.la 文件用于在编译时定位共享库和它的依赖关系。它不是库的直接二进制形式,而是构建系统中使用的一个辅助文件。3

官方网址:https://www.gnu.org/software/libtool/

libtool websit

2 .la 文件内容介绍

以下是一个名为 libgmp.la.la 文件(这是一个简化的版本):

# libmpfr.la - a libtool library file
# Generated by libtool (GNU libtool) 2.4.7 Debian-2.4.7-7

# The name that we can dlopen(3).
dlname='libmpfr.so.6'

# Names of this library.
library_names='libmpfr.so.6.2.1 libmpfr.so.6 libmpfr.so'

# The name of the static archive.
old_library='libmpfr.a'

# Linker flags that cannot go in dependency_libs.
inherited_linker_flags=''

# Libraries that this one depends upon.
dependency_libs=' /usr/lib/libgmp.la'

# Version information for libmpfr.
current=8
age=2
revision=1

# Directory that this library needs to be installed in:
libdir='/usr/lib'

它可能包含如下内容:

  • dlname: 可被 dlopen() 函数调用的动态库名称,可能包含版本号。
  • library_names: 动态库名称。
  • old_library: 静态库名称。
  • dependency_libs: 库的依赖关系。
  • Version information: 库的版本信息。
  • libdir: 安装路径,库文件在文件系统中的位置。

通常,开发者不需要直接处理 .la 文件。libtool 和其他工具会自动读取这些信息。然而,了解 .la 文件的存在和作用可以帮助解决链接问题或理解项目的构建过程。

3 交叉编译时的注意事项

报错信息:

libtool: link: cannot find the library `/usr/lib/libgmp.la' or unhandled argument `/usr/lib/libgmp.la'

在交叉编译过程中,由于 libgmp.la 的安装路径并非根目录下的 /usr/lib,则 libtool 此时根本找不到 libgmp.la 文件(路径不正确)。这种情况下,libtool 只会把 -lgmp 当作参数传递给 gcc 命令行。

另一种情况类似,如果 libgmp.so 不是使用 libtool 工具生成的,则 libtool 此时根本找不到 libgmp.la 文件(不存在该文件)。这种情况下,libtool 也只会把 -lgmp 当作参数传递给 gcc 命令行。

如果你了解并知悉整个过程,只需要删除 .la 文件即可解决以上问题。不幸的是,这是 libtool 的一个非常麻烦的设计,需要硬编码你用来安装软件的路径,那就有可能会导致这样的问题。4

接下来的博文继续聊聊关于交叉编译过程中非常重要的库搜索工具 pkg-config,敬请期待。


  1. 文心一言:libtool .la ↩︎

  2. linux中la是什么文件 ↩︎

  3. Linux中后缀名为ko、o、a、so、la的文件介绍 ↩︎

  4. libtool .la library file wrong path ↩︎

sudo make install Making install in libfcgi make[1]: Entering directory '/home/yk/fcgi-2.4.1-SNAP-0910052249/libfcgi' make[2]: Entering directory '/home/yk/fcgi-2.4.1-SNAP-0910052249/libfcgi' test -z "/home/yk/fcgi/lib" || mkdir -p -- "/home/yk/fcgi/lib" /bin/bash ../libtool --mode=install /usr/bin/install -c 'libfcgi.la' '/home/yk/fcgi/lib/libfcgi.la' /usr/bin/install -c .libs/libfcgi.so.0.0.0 /home/yk/fcgi/lib/libfcgi.so.0.0.0 (cd /home/yk/fcgi/lib && { ln -s -f libfcgi.so.0.0.0 libfcgi.so.0 || { rm -f libfcgi.so.0 && ln -s libfcgi.so.0.0.0 libfcgi.so.0; }; }) (cd /home/yk/fcgi/lib && { ln -s -f libfcgi.so.0.0.0 libfcgi.so || { rm -f libfcgi.so && ln -s libfcgi.so.0.0.0 libfcgi.so; }; }) /usr/bin/install -c .libs/libfcgi.lai /home/yk/fcgi/lib/libfcgi.la /usr/bin/install -c .libs/libfcgi.a /home/yk/fcgi/lib/libfcgi.a chmod 644 /home/yk/fcgi/lib/libfcgi.a arm-xilinx-linux-gnueabi-ranlib /home/yk/fcgi/lib/libfcgi.a ../libtool: line 6556: arm-xilinx-linux-gnueabi-ranlib: command not found /bin/bash ../libtool --mode=install /usr/bin/install -c 'libfcgi++.la' '/home/yk/fcgi/lib/libfcgi++.la' libtool: install: warning: relinking `libfcgi++.la' (cd /home/yk/fcgi-2.4.1-SNAP-0910052249/libfcgi; /bin/bash ../libtool --tag=CXX --mode=relink arm-xilinx-linux-gnueabi-g++ -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi -O2 -pipe -g -feliminate-unused-debug-types -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -o libfcgi++.la -lfcgi -rpath /home/yk/fcgi/lib fcgio.lo ) arm-xilinx-linux-gnueabi-g++ -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 --sysroot=/home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi -shared -nostdlib /home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib/crti.o /home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib/arm-xilinx-linux-gnueabi/8.2.0/crtbeginS.o .libs/fcgio.o -Wl,--rpath -Wl,/home/yk/fcgi/lib -L/home/yk/fcgi/lib -lfcgi -L/home/yk/sdk/sysroots/x86_64-petalinux-linux/usr/lib/arm-xilinx-linux-gnueabi/gcc/arm-xilinx-linux-gnueabi/8.2.0 -L/home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/lib -L/home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib/arm-xilinx-linux-gnueabi/8.2.0 -L/home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib -lstdc++ -lm -lc -lgcc_s /home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib/arm-xilinx-linux-gnueabi/8.2.0/crtendS.o /home/yk/sdk/sysroots/cortexa9t2hf-neon-xilinx-linux-gnueabi/usr/lib/crtn.o -march=armv7-a -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-soname -Wl,libfcgi++.so.0 -o .libs/libfcgi++.so.0.0.0 ../libtool: line 4501: arm-xilinx-linux-gnueabi-g++: command not found libtool: install: error: relink `libfcgi++.la' with the above command before installing it Makefile:256: recipe for target 'install-libLTLIBRARIES' failed make[2]: *** [install-libLTLIBRARIES] Error 1 make[2]: Leaving directory '/home/yk/fcgi-2.4.1-SNAP-0910052249/libfcgi' Makefile:459: recipe for target 'install-am' failed make[1]: *** [install-am] Error 2 make[1]: Leaving directory '/home/yk/fcgi-2.4.1-SNAP-0910052249/libfcgi' Makefile:373: recipe for target 'install-recursive' failed make: *** [install-recursive] Error 1
最新发布
07-21
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iBlackAngel

您的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值