构建日志:
20:10:36 make[3]: Entering directory `/home/ubuntu/build/ColossusCoinXT/distsrc-i686-pc-linux-gnu/src/minizip'
20:10:36 /bin/bash ./libtool --tag=CC --mode=compile gcc -m32 -DPACKAGE_NAME=\"minizip\" -DPACKAGE_TARNAME=\"minizip\" -DPACKAGE_VERSION=\"1.2.8\" -DPACKAGE_STRING=\"minizip\ 1.2.8\" -DPACKAGE_BUGREPORT=\"bugzilla.redhat.com\" -DPACKAGE_URL=\"\" -DPACKAGE=\"minizip\" -DVERSION=\"1.2.8\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I./../.. -I/home/ubuntu/build/ColossusCoinXT/depends/i686-pc-linux-gnu/share/../include/ -pipe -O2 -O2 -g -c -o ioapi.lo ioapi.c
20:10:36 libtool: compile: gcc -m32 -DPACKAGE_NAME=\"minizip\" -DPACKAGE_TARNAME=\"minizip\" -DPACKAGE_VERSION=\"1.2.8\" "-DPACKAGE_STRING=\"minizip 1.2.8\"" -DPACKAGE_BUGREPORT=\"bugzilla.redhat.com\" -DPACKAGE_URL=\"\" -DPACKAGE=\"minizip\" -DVERSION=\"1.2.8\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -I. -I./../.. -I/home/ubuntu/build/ColossusCoinXT/depends/i686-pc-linux-gnu/share/../include/ -pipe -O2 -O2 -g -c ioapi.c -fPIC -DPIC -o ioapi.o
20:10:36 gcc: error: 1.2.8": No such file or directory
问题在第三行:"-DPACKAGE_STRING=\"minizip 1.2.8\""
,由于空间的原因,编译器将此定义解释为两个不同的参数。我正在寻找解决方法,最简单的方法似乎是未定义这些AC_INIT预处理器符号,但我没有找到一种方法来实现此目的。
configure.ac:
AC_INIT([minizip], [1.2.8], [bugzilla.redhat.com])
AC_CONFIG_SRCDIR([minizip.c])
AM_INIT_AUTOMAKE([no-define foreign])
LT_INIT
...
正在寻找快速的解决方法,谢谢!
答案 0 :(得分:0)
目前,我使用下一种解决方法:
AC_CONFIG_COMMANDS([quickfix], [sed -i 's/minizip\\\ 1.2.8/minizip-1.2.8/g' Makefile])
AC_OUTPUT
如果知道的话,请发布更好的解决方案。
答案 1 :(得分:0)
当-DFOO=bar
定义列表过长时,请autoconf
将所有这些定义写入单个头文件(通常称为config.h
):
AC_INIT([pkg], [1.2.3], [bugs@example.com])
AC_CONFIG_HEADERS([internal/config.h])
缺点是,现在您需要在最顶层附近的所有编译单元中明确地#include "config.h"
,以便以后的#ifdef
能够正常工作。
另外,请确保您现在运行的是autoreconf
而不是autoconf
,因为autoreconf
会调用自动标头来维护与您的config.h.in
相对应的config.h
文件必要时归档。 (我几乎总是使用autoreconf -vis .
)
如果您在编写库,请确保公共接口的头文件请勿包含库的config.h
文件,因为这将导致与使用该文件的任何其他软件包的名称冲突config.h
!
有关以下主题的Autoconf信息文档:Configuration Header Files