首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >autoconf/automake/libtool -如何取消定义PACKAGE_NAME、PACKAGE_TARNAME、PACKAGE_VERSION等

autoconf/automake/libtool -如何取消定义PACKAGE_NAME、PACKAGE_TARNAME、PACKAGE_VERSION等
EN

Stack Overflow用户
提问于 2018-09-06 03:16:28
回答 3查看 217关注 0票数 0

构建日志:

代码语言:javascript
运行
复制
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:

代码语言:javascript
运行
复制
AC_INIT([minizip], [1.2.8], [bugzilla.redhat.com])
AC_CONFIG_SRCDIR([minizip.c])
AM_INIT_AUTOMAKE([no-define foreign])
LT_INIT
...

正在寻找快速解决方法,谢谢!

EN

回答 3

Stack Overflow用户

发布于 2018-09-07 13:50:23

现在,我使用next解决方法:

代码语言:javascript
运行
复制
AC_CONFIG_COMMANDS([quickfix], [sed -i 's/minizip\\\ 1.2.8/minizip-1.2.8/g' Makefile])
AC_OUTPUT

如果你知道,请贴出更好的解决方案。

票数 0
EN

Stack Overflow用户

发布于 2018-12-05 08:12:58

-DFOO=bar定义列表变得太长时,让autoconf将所有这些定义写入单个头文件(通常称为config.h):

代码语言:javascript
运行
复制
AC_INIT([pkg], [1.2.3], [bugs@example.com])
AC_CONFIG_HEADERS([internal/config.h])

缺点是,您现在需要在靠近顶部的所有编译单元中显式#include "config.h",以便以后的#ifdef可以正常工作。

此外,请确保现在运行的是autoreconf而不是autoconf,因为autoreconf将在必要时调用autoheader来维护与config.h文件相对应的config.h.in文件。(我几乎总是使用autoreconf -vis .)

如果您正在编写一个库,请确保公共接口的头文件不包括您的库的config.h文件,因为这将导致与使用config.h的任何其他包的名称冲突!

Autoconf info文档的主题:Configuration Header Files

票数 0
EN

Stack Overflow用户

发布于 2022-01-10 06:53:43

看看您的构建输出:

  • 打印时,make调用的libtool命令行包含-DPACKAGE_STRING=\"minizip\ 1.2.8\",这是在shell上传递包含空格字符的参数的好方法。

  • 当libtool打印时,由libtool调用的gcc编译命令包含"-DPACKAGE_STRING=\"minizip 1.2.8\"",这是在命令行上传递包含空格字符的参数的另一种好方法。

目前还没有发现任何错误。

但是,gcc打印的错误消息表明,最终调用的gcc命令实际上与libtool打印为该命令的命令不同。

这就留下了两种可能性:

  • 您的构建使用的libtool脚本已经损坏,并且以与打印方式不同的方式调用gcc。您可以尝试运行make distclean,然后重新运行autoreconfconfigure,从头开始重新构建迷你构建系统,其中包括libtool脚本。

  • libtool脚本正确调用gcc命令,但gcc命令是实际的gcc的包装器,该包装器不正确地将其参数传递给实际的gcc,从而阻塞了不正确的参数。包装gcc的软件包的一个例子是ccache,但还有其他的。

检查此问题的一种方法是在shell中运行which gcc,然后分析结果:它属于哪个包,是否使用替代方案重定向,等等。可能有此软件的更新版本修复了报价错误。

minizip源码树本身很好(在Debian 10上测试过):

代码语言:javascript
运行
复制
[user@host ~]$ git clone https://github.com/madler/zlib.git
[…]
[user@host ~]$ cd zlib/contrib/minizip
[user@host minizip]$ git checkout -b minizip-1.2.8 v1.2.8
[…]
[user@host minizip]$ autoreconf -vis .
[…]
[user@host minizip]$ ./configure --prefix=$PWD/_i
[…]
[user@host minizip]$ make
/bin/bash ./libtool  --tag=CC   --mode=compile gcc -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./../..   -g -O2 -MT ioapi.lo -MD -MP -MF .deps/ioapi.Tpo -c -o ioapi.lo ioapi.c
libtool: compile:  gcc -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./../.. -g -O2 -MT ioapi.lo -MD -MP -MF .deps/ioapi.Tpo -c ioapi.c  -fPIC -DPIC -o .libs/ioapi.o
libtool: compile:  gcc -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./../.. -g -O2 -MT ioapi.lo -MD -MP -MF .deps/ioapi.Tpo -c ioapi.c -o ioapi.o >/dev/null 2>&1
mv -f .deps/ioapi.Tpo .deps/ioapi.Plo
[…]
libtool: link: gcc -shared  -fPIC -DPIC  .libs/ioapi.o .libs/mztools.o .libs/unzip.o .libs/zip.o   -L./../.. -lz  -g -O2   -Wl,-soname -Wl,libminizip.so.1 -o .libs/libminizip.so.1.0.0
libtool: link: (cd ".libs" && rm -f "libminizip.so.1" && ln -s "libminizip.so.1.0.0" "libminizip.so.1")
libtool: link: (cd ".libs" && rm -f "libminizip.so" && ln -s "libminizip.so.1.0.0" "libminizip.so")
libtool: link: ar cru .libs/libminizip.a  ioapi.o mztools.o unzip.o zip.o
ar: `u' modifier ignored since `D' is the default (see `U')
libtool: link: ranlib .libs/libminizip.a
libtool: link: ( cd ".libs" && rm -f "libminizip.la" && ln -s "../libminizip.la" "libminizip.la" )
[user@host minizip]$ _
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52192019

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档