什么是libtool的.la文件?

cha*_*par 143 linux libtool libraries

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

Art*_*yom 132

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

它允许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
Run Code Online (Sandbox Code Playgroud)

Cygwin下:

/lib/libfoo.dll.a    # Import library
/lib/libfoo.a        # Static library
/lib/libfoo.la       # libtool library
/bin/cygfoo_1.dll    # DLL
Run Code Online (Sandbox Code Playgroud)

在Windows MinGW下:

/lib/libfoo.dll.a    # Import library
/lib/libfoo.a        # Static library
/lib/libfoo.la       # 'libtool' library
/bin/foo_1.dll       # DLL
Run Code Online (Sandbox Code Playgroud)

因此libfoo.la,通过libtool允许了解发生的情况,在平台之间保留的唯一文件是:

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

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

  • 你不能libfoo.la只保存元信息,即libfoo.la(文本文件)写在哪里你应该找到libfoo.so.xyz (6认同)
  • 那么如何将.la文件转换为特定于平台的共享库文件,如libfoo.la - > libfoo.so.* (5认同)
  • 这是否意味着为了生成.la文件,我需要使用libtool(例如来自automake)?可以依靠`libtool`链接目标文件(http://www.gnu.org/software/libtool/manual/html_node/Using-Automake.html),但如果我想分发没有.la的库,这意味着使用Cygwin或mingw很难与它联系起来? (4认同)
  • @theactiveactor 作为 .la 文件保存元数据,它必须在某处有静态库。要找到这一点,您可以运行“libtool --mode-link ${whatever_command_you_would_use_for_linking} -lfoo -L${where_libfoo.la_exists}”,它将打印链接命令作为调试信息。就我而言,静态文件位于包含 *.la 文件的 .libs/ 文件夹中 (2认同)

Tho*_*ard 11

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

在一个完美的世界里,每一个静态库需要依赖会对pkg配置自己的.PC文件,每包试图静态链接到该库将使用pkg配置--static去链接到库.


Rak*_*Rak 9

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

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