Linux 什么是libtool';洛杉矶的档案?

Linux 什么是libtool';洛杉矶的档案?,linux,libraries,libtool,Linux,Libraries,Libtool,libtool的.la文件用于什么?它们是如何与共享对象一起使用的?它是一个包含库描述的文本文件 它允许libtool创建独立于平台的名称 例如,libfoo转到: 在Linux下: /lib/libfoo.so # Symlink to shared object /lib/libfoo.so.1 # Symlink to shared object /lib/libfoo.so.1.0.1 # Shared object /lib/libfoo.a # St

libtool的
.la
文件用于什么?它们是如何与共享对象一起使用的?

它是一个包含库描述的文本文件

它允许
libtool
创建独立于平台的名称

例如,
libfoo
转到:

在Linux下:

/lib/libfoo.so       # Symlink to shared object
/lib/libfoo.so.1     # Symlink to shared object
/lib/libfoo.so.1.0.1 # Shared object
/lib/libfoo.a        # Static library
/lib/libfoo.la       # 'libtool' library
根据:

在Windows MinGW下:

/lib/libfoo.dll.a    # Import library
/lib/libfoo.a        # Static library
/lib/libfoo.la       # 'libtool' library
/bin/foo_1.dll       # DLL
因此,
libfoo.la
是平台间由
libtool
保存的唯一文件,它允许了解以下情况:

  • 库依赖项
  • 实际文件名
  • 图书馆版本和修订
不依赖于库的特定平台实现。

根据,需要它们来处理依赖关系。但使用pkg config可能是更好的选择:

在一个完美的世界中,每个需要依赖项的静态库都有自己的.pc文件用于pkg config,每个试图静态链接到该库的包都将使用pkg config--static来获取要链接到的库


我在这里找到了关于.la文件的很好的解释


概要(我理解的方式):因为libtool在内部处理静态和动态库(通过--diable shared或--disable static),所以它在构建的库文件上创建了一个包装器。在libtool支持的环境中,它们被视为二进制库文件

那么,如何将.la文件转换为特定于平台的共享lib文件,如libfoo.la->libfoo.so.*您不能将libfoo.la仅保存元信息,例如,在libfoo.la(文本文件)中,您应该在哪里找到libfoo.so.x.y.zd?这是否意味着为了生成.la文件,我需要使用libtool(例如,来自automake)?可以依靠
libtool
来链接对象文件(),但如果我想分发一个没有.la的库,这是否意味着使用Cygwin或mingw链接它会非常困难?如果有人想禁用这个版本,可以在_la_LDFLAGS中使用-avoid version,而不是-版本-info@theactiveactor由于.la文件包含元数据,所以它必须在某个地方具有静态库。要找到它,您可以运行
libtool--modelink${无论您使用什么命令进行链接}-lfoo-L${where_libfoo.la_exists}
,它会将链接命令作为调试信息打印出来。在我的例子中,静态文件位于.libs/文件夹中,其中也包含*.la文件
/lib/libfoo.dll.a    # Import library
/lib/libfoo.a        # Static library
/lib/libfoo.la       # 'libtool' library
/bin/foo_1.dll       # DLL