使用gcc 3.4.5编译TCL 7.6.2

使用gcc 3.4.5编译TCL 7.6.2,gcc,compilation,tcl,Gcc,Compilation,Tcl,我正在使用gcc 3.4.5编译TCL 7.6p2。我使用的是CentOS 5.5。在执行make命令期间,我遇到以下错误: ./../generic/tclPosixStr.c: In function `Tcl_ErrnoId': ./../generic/tclPosixStr.c:340: error: duplicate case value ./../generic/tclPosixStr.c:328: error: previously used here ./../generic

我正在使用gcc 3.4.5编译TCL 7.6p2。我使用的是CentOS 5.5。在执行make命令期间,我遇到以下错误:

./../generic/tclPosixStr.c: In function `Tcl_ErrnoId':
./../generic/tclPosixStr.c:340: error: duplicate case value
./../generic/tclPosixStr.c:328: error: previously used here
./../generic/tclPosixStr.c: In function `Tcl_ErrnoMsg':
./../generic/tclPosixStr.c:787: error: duplicate case value
./../generic/tclPosixStr.c:775: error: previously used here
make: *** [tclPosixStr.o] Error 1
如有任何提示,将不胜感激。谢谢。

您正在尝试使用一个多年不受支持的古老版本。因此,您最好的方法是对源代码进行黑客攻击,从那些
switch
语句中注释掉有问题的案例。或者换成别人愿意支持的东西(但这是你的决定)

详细说明:似乎EOPNOTSUPP与ENOTSUP的值相同;注释掉与EOPNOTSUPP相关的每组三行(或至少是带有
案例的行;周围的
#ifdef
机器无害),以消除问题。或者,您可以将所有非古旧版本中存在的更改向后移植,这将
#ifdef
行改进为:

#if defined(EOPNOTSUPP) &&  (!defined(ENOTSUP) || (ENOTSUP != EOPNOTSUPP))

不过,不要麻烦将此报告为bug。Tcl 7.6p2不受支持。

你究竟为什么要构建这样一个古老的版本?目前的稳定版本是8.5.9,可从eggdrop常见问题解答的一个版本中获得,但显然仍然推荐它。很明显,FAQ的特定修订版已经有10多年的历史了。我注释掉了所有与EOPNOTSUPP相关的case行,并成功地编译了它。谢谢