设置自动工具库文件名并稍后引用

Posted

技术标签:

【中文标题】设置自动工具库文件名并稍后引用【英文标题】:Set autotools library filename and reference it later on 【发布时间】:2017-11-07 18:18:57 【问题描述】:

我正在使用autotools 构建一个库,该库稍后将由另一个程序加载。无论我在哪个平台上,这个库都必须有一个 .so 扩展名(这是加载它的程序的要求),我也希望它没有版本说明符。如何设置此类库的输出名称?

这就是Makefile.am 的样子

lib_LTLIBRARIES = mylib.la
mylib_la_SOURCES = mylib.c
mylib_la_CPPFLAGS = $(LTDLINCL)
mylib_la_CFLAGS = $(CFLAGS) $(LIBFFI_CFLAGS)
LDADD = $(LIBLTDL) -dlopen self

阅读libtool 手册页,似乎我需要设置-install_name,但在生成的Makefile 任何地方都没有看到它。

我还需要能够在Makefiles 的其他地方引用此库的输出目录(用于测试目的),是否有包含其基本名称或完整路径的变量?

【问题讨论】:

如果您想将-install_name 选项表达为libtool,那么您可以将其放入变量mylib_la_LDFLAGS,或者放入AM_LDFLAGS。您还没有这样做,我不明白您为什么希望在生成的 Makefile 中看到任何此类选项。 这是我第一次使用autotools。来自cmake,这似乎是正确的行为。 编辑: -install_name 并没有做我想做的事。 在这种情况下,如果您修改了configure.ac 文件或Makefile.am 文件之一,那么您应该随后运行autoreconf,这对您来说可能并不明显。您可能还不清楚您使用 Autotools 从这些文件构建构建系统,但结果——configure 脚本、支持脚本,也许还有Makefile.in 文件——独立于 Autotools。您不需要 Autotools 本身来配置或构建软件。 你有没有考虑过不去对抗系统?为什么不在标准共享库扩展不同于.so(Mac 上的)的那些系统上创建一个正确命名的符号链接? 谢谢,但我了解这些工具的工作原理。我之前曾多次使用它们来构建软件,并且发现自己阅读了生成的脚本以调试它们。每次更改后我都会运行autoreconfconfigure。至于符号链接,我想到了这个想法,但无论如何我打算将库打包为.so,所以也许cp 会更好。无论哪种方式,我仍然不知道如何获取二进制文件(或其目录)的完整路径。 【参考方案1】:

如何设置此类库的输出名称?

库的输出名称将是lib_LTLIBRARIES 中给出的名称,不带后缀.a。默认情况下,它将生成一个共享库 - .so。因此,您无需指定其他任何内容。

我还需要能够在 Makefiles 的其他地方引用这个库的输出目录(用于测试目的),是否有包含其基本名称或完整路径的变量?

Makefile 中的变量$(libdir)@libdir@ 将指向库目录的完整路径。

【讨论】:

以上是关于设置自动工具库文件名并稍后引用的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Podfile 的安装后部分自动添加文件引用并设置该文件的目标?

手动 VS 自动阵列澄清

在0FFICE-XP的文件中设置权限时,出现提示:“发生意外错误,请稍后再试”是啥原因

go import自动删除未引用的库

如何在 FragmentPagerAdapter 中添加片段标签以便稍后引用片段?

#指尖人生#Linux系统服务---logrotate