使用autoconf配置libcurl依赖时生成的configure脚本出现语法错误如何解决
错误原因
- 宏参数顺序错误:官方
LIBCURL_CHECK_CONFIG宏的定义为LIBCURL_CHECK_CONFIG([最低版本要求], [找到依赖时执行动作], [未找到依赖时执行动作]),你当前仅传了2个参数,将未找到依赖的失败逻辑放到了第二个参数(即找到依赖时的执行位),导致宏展开时shell语法不闭合,触发了unexpected token '}'及后续的一元运算符报错。 - 宏加载不完整:如果未将下载的libcurl.m4放入项目指定的宏目录,也未在configure.ac中声明宏目录,会导致autoreconf时宏展开不完整,生成的configure脚本存在语法错误。
- 版本不兼容:最新版的libcurl.m4依赖较高版本的autoconf特性,如果你本地autoconf版本低于2.71,也可能出现展开后的语法异常。
解决思路
- 修正宏参数顺序,按定义传入对应位置的参数,参考正确写法:
LIBCURL_CHECK_CONFIG( [], [], [AC_MSG_FAILURE([LibCurl not found it is must for this install])] )
如果需要限制最低libcurl版本,可在第一个参数填写版本号,例如[7.68.0];第二个参数为空时,宏会自动生成LIBCURL_CFLAGS和LIBCURL_LIBS变量供Makefile调用。
- 检查宏目录配置:将libcurl.m4放入项目根目录的
m4文件夹中,在configure.ac开头添加AC_CONFIG_MACRO_DIR([m4])声明,之后执行autoreconf -vfi完整重新生成配置脚本即可。 - 若不想引入第三方m4文件,可直接使用pkg-config的检查宏替代,写法更简单无需额外依赖:
PKG_CHECK_MODULES([LIBCURL], [libcurl], [], [AC_MSG_FAILURE([LibCurl not found it is must for this install])])
后续在Makefile.am中对应目标的编译参数添加$(LIBCURL_CFLAGS),链接参数添加$(LIBCURL_LIBS)即可正常调用libcurl。
- 如遇版本兼容问题,可执行
autoconf --version查看本地版本,升级autoconf到2.71及以上即可解决。
内容的提问来源于stack exchange,提问作者Shahid Roofi Khan
相关产品推荐
相关产品推荐

