我无法在OS X Mountain Lion上通过CPAN安装Perl / Tk。它在Google无法帮助的文件中出错:
/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。
任何可能导致此问题的想法?
答案 0 :(得分:0)
从5.17.7发行说明:
SvUPGRADE()不再是表达式。原来这个宏(和它的 虽然底层函数sv_upgrade())被记录为boolean 实际上,他们总是在错误中嘶哑而且从不返回虚假。 2005年 更新了文档以指定void返回值,但是 为了向后兼容,SvUPGRADE()总是返回1。这个 现在已被删除,并且SvUPGRADE()现在是一个没有返回的语句 值。
所以现在这是一个语法错误:
if (!SvUPGRADE(sv)) { croak(...); }
如果您有这样的代码,只需将其替换为
即可SvUPGRADE(sv);
或避免编译器警告使用旧的perls,可能是
(void)SvUPGRADE(sv);
已经reported。