172

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

4

3 回答 3

158

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

它允许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.la在平台之间保留的唯一文件也是如此:libtool

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

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

于 2009-08-06T10:22:48.110 回答
15

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

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

于 2012-02-09T19:08:40.070 回答
13

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

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

于 2012-08-22T22:00:20.977 回答