我正在尝试获取dropbear ssh C 代码来构建库而不是二进制文件。Dropbear 是configure
通过configure.ac
使用autoconf
. 然后configure
用于生成Makefile
构建可执行文件的 。我想为生成Makefile
的创建一个静态链接库的目标,以便我的应用程序可以链接它并可以访问 dropbear 功能。
是否有直接的方法来修改configure.ac
以实现这一目标?
没有。但是,有一种直接的方法可以为此修改Makefile.in
。Makefile.in
是Makefile
;的模板 该脚本只是用它在运行期间推导出的值替换包含在 中的configure
表达式,因此您可以将规则添加到与普通 Makefile 几乎相同的方式。@
Makefile.in
Makefile.in
在这种特殊情况下,您可以添加以下内容:
dropbearlibobjs = $(filter-out svr-main.o,$(dropbearobjs))
libdropbear.a: $(dropbearlibobjs) $(HEADERS) $(LIBTOM_DEPS) Makefile
ar rcs $@ $(dropbearlibobjs)
其中大部分来自dropbear:
目标,除了配方构建一个静态库并且包含该main
函数的翻译单元被过滤掉。然后你可以使用
./configure
make libdropbear.a
建立图书馆。
不过,我不确定这个库与新程序集成的难易程度。dropbear 的作者几乎可以肯定在编写此用例时没有考虑到它,因此部分代码可能依赖于您的应用程序无法提供的全局状态(例如信号处理程序),并且通常没有文档化的 API 可供您依赖. 我不知道你到底打算做什么,但这条路不太可能简单明了。