0

我无法在 OS X Mountain Lion 上通过 CPAN 安装 Perl/Tk。它在谷歌没有帮助的文件中出错:

/Users/villadelfia/perl5/perlbrew/perls/perl-5.17.8/bin/perl5.17.8 /Users/villadelfia/perl5/perlbrew/perls/perl-5.17.8/lib/5.17.8/ExtUtils/xsubpp  -typemap /Users/villadelfia/perl5/perlbrew/perls/perl-5.17.8/lib/5.17.8/ExtUtils/typemap -typemap /Users/villadelfia/Downloads/Tk-804.030/Tk/typemap  IO.xs > IO.xsc && mv IO.xsc IO.c
Warning: Found a 'CODE' section which seems to be using 'RETVAL' but no 'OUTPUT' section. in IO.xs, line 235
cc -c  -I.. -I/usr/X11R6/include -I/usr/local/include/freetype2 -fno-common -DPERL_DARWIN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -O3   -DVERSION=\"804.03\" -DXS_VERSION=\"804.03\"  "-I/Users/villadelfia/perl5/perlbrew/perls/perl-5.17.8/lib/5.17.8/darwin-2level/CORE"   -Wall -Wno-implicit-int -Wno-comment -Wno-unused -D__USE_FIXED_PROTOTYPES__ IO.c
IO.xs:210:10: error: invalid argument type 'void' to unary expression
     if (!SvUPGRADE(buf, SVt_PV))
         ^~~~~~~~~~~~~~~~~~~~~~~
1 error generated.
make[1]: *** [IO.o] Error 1
make: *** [subdirs] Error 2

如您所见,我也运行 perlbrew。

有什么想法可能导致这种情况吗?

4

1 回答 1

0

从 5.17.7 发行说明:

SvUPGRADE() 不再是一个表达式。最初,这个宏(及其底层函数 sv_upgrade())被记录为布尔值,尽管实际上它们总是在错误时发牢骚并且从不返回 false。2005 年更新了文档以指定一个 void 返回值,但为了向后兼容,SvUPGRADE() 始终返回 1。这现在已被删除,并且 SvUPGRADE() 现在是一个没有返回值的语句。

所以这现在是一个语法错误:

if (!SvUPGRADE(sv)) { croak(...); }

如果您有这样的代码,只需将其替换为

SvUPGRADE(sv);

或者为了避免使用较旧的 perls 的编译器警告,可能

(void)SvUPGRADE(sv);

它已经被报道了。

于 2013-02-03T18:51:54.590 回答