【问题标题】:What are libtool's .la file for?libtool 的 .la 文件有什么用?
【发布时间】:2010-11-17 07:19:46
【问题描述】:

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

【问题讨论】:

标签: linux libraries libtool


【解决方案1】:

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

它允许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

Cygwin下:

/lib/libfoo.dll.a    # Import library
/lib/libfoo.a        # Static library
/lib/libfoo.la       # libtool library
/bin/cygfoo_1.dll    # DLL

在 Windows MinGW 下:

/lib/libfoo.dll.a    # Import library
/lib/libfoo.a        # Static library
/lib/libfoo.la       # 'libtool' library
/bin/foo_1.dll       # DLL

所以libfoo.lalibtool 在平台之间保留的唯一文件,以便了解发生了什么:

  • 库依赖项
  • 实际文件名
  • 库版本和修订版

不依赖于特定平台的库实现。

【讨论】:

  • 那么如何将 .la 文件转换为特定于平台的共享库文件,例如 libfoo.la -> libfoo.so.*
  • 你不能 libfoo.la 只保存元信息,即在 libfoo.la(文本文件)中你应该在哪里找到 libfoo.so.x.y.z
  • 这是否意味着为了生成 .la 文件,我需要使用 libtool(例如来自 automake)?可以依靠libtool 链接目标文件(gnu.org/software/libtool/manual/html_node/Using-Automake.html),但如果我想分发一个没有 .la 的库,是否意味着使用 Cygwin 或 mingw 与它链接会非常困难?
  • 如果有人想禁用这个版本的东西,你可以在你的_la_LDFLAGS中使用-avoid-version,而不是-version-info
  • @theactiveactor 因为 .la 文件包含元数据,它必须在某处有静态库。要找到它,您可以运行libtool --mode-link ${whatever_command_you_would_use_for_linking} -lfoo -L${where_libfoo.la_exists},它会将链接命令打印为调试信息。在我的情况下,静态文件位于包含 *.la 文件的 .libs/ 文件夹中
【解决方案2】:

根据http://blog.flameeyes.eu/2008/04/14/what-about-those-la-files,需要它们来处理依赖关系。但是使用 pkg-config 可能是更好的选择:

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

【讨论】:

    【解决方案3】:

    我在这里找到了关于 .la 文件的很好的解释 http://openbooks.sourceforge.net/books/wga/dealing-with-libraries.html

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

    【讨论】:

      猜你喜欢
      • 2019-03-05
      • 1970-01-01
      • 2014-05-31
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      相关资源
      最近更新 更多