tcl的Nap6.4未能安装和制作,原因是;Nap“u parse”的冲突类型;

tcl的Nap6.4未能安装和制作,原因是;Nap“u parse”的冲突类型;,tcl,bison,Tcl,Bison,我需要安装Nap6.4,但由于“错误:Nap_解析的冲突类型”而失败。我有一个Dockerfile,其中包括“ADD./nap6_4_0src.tar.gz/usr/local”,并从usr/local/nap/unix输入: ./configure --prefix=/usr/local && make && make install 我使用相同的方法安装了Proj4、hdf4和netcdf。我也尝试过其他版本的Nap,但它们都给出了相同的错误。过去几天我一直

我需要安装Nap6.4,但由于“错误:Nap_解析的冲突类型”而失败。我有一个Dockerfile,其中包括“ADD./nap6_4_0src.tar.gz/usr/local”,并从usr/local/nap/unix输入:

./configure --prefix=/usr/local && make && make install
我使用相同的方法安装了Proj4、hdf4和netcdf。我也尝试过其他版本的Nap,但它们都给出了相同的错误。过去几天我一直在尝试修改nap/generic下的文件,其中一些是Bison生成的,还有一些m4文件。有人认识到这个错误并知道如何修复它吗?任何帮助都将不胜感激

以下是错误消息:

cc -c -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -   DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -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 -DUSE_TCL_STUBS=1 -DUSE_TK_STUBS=1 -DHAVE_UNISTD_H=1 -DISNAN64=isnan -DVERSION=\"6.4\" -DPATCHLEVEL=\".0\" -I`echo /build/nap/generic` -I`echo /usr/local/include` -I`echo /usr/local/include` -I`echo /usr/local/include` -I`echo /lib/ActiveTcl-8.6/include` -O -D__NO_STRING_INLINES -D__NO_MATH_INLINES  -fPIC  `echo /build/nap/generic/eval_tree.c`
In file included from /build/nap/generic/eval_tree.c:16:0:
/build/nap/generic/napParse.tab.h:79:5: error: conflicting types for 'Nap_parse'
int Nap_parse (void);
 ^
In file included from /build/nap/generic/eval_tree.c:14:0:
   /build/nap/generic/nap.h,m4:610:13: note: previous declaration of Nap_parse was here
EXTERN int  Nap_parse(void *Nap_param); /* Defined in napParse.y */
         ^
make: *** [eval_tree.o] Error 1
此外,我还发现了一些其他错误:

napParse.tab.c:2122:46: error: macro "Nap_error" passed 2 arguments, but     takes just 1
/usr/local/nap/generic/napParse.tab.c:65:25: error: 'Nap_error' undeclared  (first use in this function)
 #define yyerror         Nap_error
                     ^
napParse.tab.c:2122:7: note: in expansion of macro 'yyerror'
/usr/local/nap/generic/napParse.tab.c:65:25: note: each undeclared identifier  is reported only once for each function it appears in
 #define yyerror         Nap_error
                     ^

我怀疑后一个错误以及其他一些类似的错误是因为我尝试了

./configure --prefix=/lib/ActiveTcl8.6 

你知道这里出了什么问题吗?

Nap6.4的源代码非常古老,它似乎期待着bison的特定版本。很可能你的野牛太新了,不适合这个范围

特别是,第28行和第29行:

如果您的野牛版本为v2.7或更高版本,则不会产生任何影响。这些宏在2002年已经被弃用,而在2012年,它们实际上从生成的代码中被删除。因此,
define
s将无效

此外,在第36行:

%pure_parser
我认为这可能仍然被接受,但它也被弃用了很长一段时间

对于现代bison,您可能希望删除这三行,然后(以前是
%pure_解析器
声明)插入以下内容:

%define api.pure full
%param { void* Nap_param }
如果您的bison版本不是非常最新,它可能会抱怨
%param
行,在这种情况下,您可以使用:

%define api.pure full
%parse-param { void* Nap_param }
%lex-param { void* Nap_param }
您还需要更正
Nap_error
的定义,您可以在第194行的文件
generic/Nap_check.h
中找到该定义。该定义应为:

#define Nap_error(Nap_param, message) \
    Nap_Check(Nap_param, __FILE__, __LINE__, message)
当前的
bison
扫描仪将
%parse param
中指定的参数添加到对error函数的调用中,因此您需要更改宏的原型以接受参数,而不是从环境中拾取参数


如果这样做有效,您可能需要提交一份bug报告,尽管我并不清楚是否有人在维护该软件。

nap构建过程是否正在重新创建naparse.tab.c和naparse.tab.h(检查它们的创建日期)?如果是的话,你安装了什么版本的yacc/bison?我发现我的bison版本是3.0.2,所以我删除了你建议的行,并按照你说的替换了%pure_解析器。这似乎解决了这个问题。但是,现在我在函数“Nap_parse”中得到:naparse.tab.c:naparse.tab.c:2147:35:error:macro“Nap_error”传递了2个参数,但只接受1/usr/local/Nap/generic/naparse.tab.c:65:25:error:“Nap_error”未声明(此函数中首次使用)。我是否也需要更改行“#define yyrorm Nap_error”?@Kristin:对不起,我错过了一个更改,因为我误解了
api.pure
的传统规定。我会修正答案。@KristinSolbakken:我测试了它的变化,并构建了
naparse.tab.o
,没有错误。就野牛问题而言,我认为这就够了。当然,我不能保证它的执行。谢谢,我认为这解决了那些问题。当然,make仍然不起作用,因为“针对“.rodata.str1.1”重新定位R_X86_64_32”在生成共享对象时无法使用;请使用-fPIC重新编译”。。以前是否遇到过此错误消息?@Kristin:没有,但该消息似乎表明存在一个静态编译的库,Makefile正试图将其合并到共享对象中。您必须至少确定产生该错误的原因是什么,然后您可以将所有详细信息放到另一个问题中。我认为这与野牛问题无关。
%define api.pure full
%parse-param { void* Nap_param }
%lex-param { void* Nap_param }
#define Nap_error(Nap_param, message) \
    Nap_Check(Nap_param, __FILE__, __LINE__, message)