Ale*_*min 16 module autotools libtool
如何在没有.la和.a库的情况下使用autotools/libtool构建和安装.so模块也安装到--prefix路径中?
目前我正在使用以下Makefile.am:
lib_LTLIBRARIES = libCurlDownloader.la
libCurlDownloader_la_SOURCES = Curl.cpp
libCurlDownloader_la_LDFLAGS = -module -avoid-version
Run Code Online (Sandbox Code Playgroud)
它有效,但除了libCurlDownloader.so之外,它还安装了libCurlDownloader.la和libCurlDownloader.a,这是不可取的.
更新#1
通过使用任何一个都可以使.a无法生成
./configure --disable-static
Run Code Online (Sandbox Code Playgroud)
要么
AC_ENABLE_SHARED(yes)
AC_ENABLE_STATIC(no)
Run Code Online (Sandbox Code Playgroud)
在configure.ac中
但是仍然存在如下问题:如何在安装.so时将.la安装到安装--prefix中.
更新#2
可以从安装--prefix中删除.la文件
install-exec-hook: find $(DESTDIR)$(libdir) -type f -name \*.la -delete
Run Code Online (Sandbox Code Playgroud)
您不一定要删除这些.la文件。这些.la文件包含在两种情况下使用的信息:
静态链接到构建的库。静态链接(即.a使用-static)时,没有有关所链接库的依赖项的信息,因此 libtool 可以使用文件中的信息.la来创建ld引用所有必要依赖项的适当命令。这在像 MinGW 这样的环境中通常更为重要,其中链接器需要以特定顺序指定多个相同的库来解决递归依赖关系。如果您打算构建静态二进制文件,这只是一个问题。
在某些平台上动态加载构建库(即lt_dlopen使用 if using libltdl)。同样,在某些平台上,编译模块的依赖项未编码在二进制文件中,因此.la需要该文件以便lt_dlopen找到并加载正确的依赖项。在ELF平台(包括Linux)和PE平台(即Windows)上,依赖项存储在库中,因此lt_dlopen无需文件即可工作.la。MacOS 上的 MachO 格式.la在构建捆绑包时可能需要文件。
Debian/Ubuntu 打包者决定.la从他们的软件包中排除文件,因为第二个原因在 Linux 上不合适,并且他们希望您首先不要构建静态二进制文件。在 libtool 设计支持的其他平台上,.la链接或运行程序可能需要这些文件。
| 归档时间: |
|
| 查看次数: |
4318 次 |
| 最近记录: |