设置自动工具库文件名并稍后引用
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 上的即)的那些系统上创建一个正确命名的符号链接?
谢谢,但我了解这些工具的工作原理。我之前曾多次使用它们来构建软件,并且发现自己阅读了生成的脚本以调试它们。每次更改后我都会运行autoreconf
和configure
。至于符号链接,我想到了这个想法,但无论如何我打算将库打包为.so
,所以也许cp
会更好。无论哪种方式,我仍然不知道如何获取二进制文件(或其目录)的完整路径。
【参考方案1】:
如何设置此类库的输出名称?
库的输出名称将是lib_LTLIBRARIES
中给出的名称,不带后缀.a
。默认情况下,它将生成一个共享库 - .so
。因此,您无需指定其他任何内容。
我还需要能够在 Makefiles 的其他地方引用这个库的输出目录(用于测试目的),是否有包含其基本名称或完整路径的变量?
Makefile 中的变量$(libdir)
或@libdir@
将指向库目录的完整路径。
【讨论】:
以上是关于设置自动工具库文件名并稍后引用的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Podfile 的安装后部分自动添加文件引用并设置该文件的目标?
在0FFICE-XP的文件中设置权限时,出现提示:“发生意外错误,请稍后再试”是啥原因