加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Autoconf中AC_CHECK_LIB依赖第三方库时FAIL

发布时间:2020-12-14 05:16:33 所属栏目:百科 来源:网络整理
导读:? ? 尝试在lighttpd中新增一个module时,发现configure是通过autoconf产生的,需要修改其中的configure.ac,这其中都是autoconf的语法,依葫芦画瓢,这里以zlib为例: AC_MSG_CHECKING(for zlib support)AC_ARG_WITH(zlib,AC_HELP_STRING([--with-zlib],[Ena

? ? 尝试在lighttpd中新增一个module时,发现configure是通过autoconf产生的,需要修改其中的configure.ac,这其中都是autoconf的语法,依葫芦画瓢,这里以zlib为例:

AC_MSG_CHECKING(for zlib support)
AC_ARG_WITH(zlib,AC_HELP_STRING([--with-zlib],[Enable zlib support for mod_compress]),[WITH_ZLIB=$withval],[WITH_ZLIB=yes])
AC_MSG_RESULT([$WITH_ZLIB])

if test "$WITH_ZLIB" != "no"; then
  AC_CHECK_LIB(z,deflate,[
    AC_CHECK_HEADERS([zlib.h],[
      Z_LIB=-lz
      AC_DEFINE([HAVE_LIBZ],[1],[libz])
      AC_DEFINE([HAVE_ZLIB_H],[1])
    ])
  ])
  if test x$Z_LIB = x; then
     AC_MSG_ERROR([zlib-headers and/or libs where not found,install them or build with --without-zlib])
  fi
fi
AC_SUBST(Z_LIB)

AC_CHECK_LIB(z,[func1],[func2])表示check libz中的函数deflate 是否正常,如果check OK则调用func1,如果失败则调用func2

这个check的过程可以参考config.log:

configure:14511: checking for zlib support
configure:14521: result: yes
configure:14525: checking for deflate in -lz
configure:14550: gcc -o conftest -Os -fstrict-aliasing -fstrict-overflow -I/include  -D_REENTRANT -D__EXTENSIONS__ -L/lib conftest.c -lz   >&5
configure:14550: $? = 0
configure:14559: result: yes
可以看到,autoconf有创建一个conftest.c,compile并link来确认libz是否support。

同样的code被移植到我们的lib上,但是结果却是fail,config.log会提示第三方库中的函数找不到,那么怎么办么?

通过查看libz的check过程,我们会发现,check中会把AC_CHECK_LIB的第一个参数作为lib name,前面增加"-l"来link,想到的是不是可以通过修改第一个参数达到link其它lib的目的,答案是肯定的。只是这个格式需要自己摸索一下:

? ? 首先测试的是直接加第三方库,譬如ssl的crypto,AC_CHECK_LIB修改为

AC_CHECK_LIB(z crypto,[],[]),仍然提示Error,察看Error提示找不到lib "-lz crypto" 虽然这是一个坏消息,但是从这个Error中可以找到一些有用的信息,引导我们走向成功。就是看起来check时把第一个参数作为一个字符串,前面直接加"-l"来link,这就使我想到,是不是可以直接增加"-lcrypto" ? 其次测试的正是上面提到的增加完整的link "-lcrypto",AC_CHECK_LIB修改为: AC_CHECK_LIB(z -lcrypto,[]),测试通过,查看log,果然是 -lz -lcrypto 目前尚不知道这个做法是否合理,只是测试可用。 有其它建议,欢迎讨论。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读