Libtool 的.la 文件是用来做什么的?

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

122582 次浏览

它是一个文本文件,其中包含库的说明。

它允许 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在平台之间保存的唯一文件,它可以理解:

  • 库依赖项
  • 实际的文件名
  • 图书馆版本及修订

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

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

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

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

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