【发布时间】:2010-11-17 07:19:46
【问题描述】:
libtool 的.la 文件有什么用?它们如何与共享对象一起使用?
【问题讨论】:
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
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 在平台之间保留的唯一文件,以便了解发生了什么:
不依赖于特定平台的库实现。
【讨论】:
libtool 链接目标文件(gnu.org/software/libtool/manual/html_node/Using-Automake.html),但如果我想分发一个没有 .la 的库,是否意味着使用 Cygwin 或 mingw 与它链接会非常困难?
libtool --mode-link ${whatever_command_you_would_use_for_linking} -lfoo -L${where_libfoo.la_exists},它会将链接命令打印为调试信息。在我的情况下,静态文件位于包含 *.la 文件的 .libs/ 文件夹中
根据http://blog.flameeyes.eu/2008/04/14/what-about-those-la-files,需要它们来处理依赖关系。但是使用 pkg-config 可能是更好的选择:
在一个完美的世界中,每个需要依赖的静态库都有自己的 .pc 文件用于 pkg-config,并且每个尝试静态链接到该库的包都将使用 pkg-config --static 来获取要链接的库到。
【讨论】:
我在这里找到了关于 .la 文件的很好的解释 http://openbooks.sourceforge.net/books/wga/dealing-with-libraries.html
总结(我理解的方式):因为 libtool 在内部(通过 --diable-shared 或 --disable-static)处理静态和动态库,它会在它构建的库文件上创建一个包装器。它们在 libtool 支持的环境中被视为二进制库文件。
【讨论】: