Strawberry perl +内联:: CPP + <sstream>未编译?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (53)

也许有人可以帮助我理解。为什么会发生此错误。我正在尝试构建使用Inline :: CPP的C ++代码。

这是一个例子:

#!/usr/bin/env perl

package main v0.1.0;

use strict;
use warnings;

use Inline(
    CPP => <<'CPP',
#undef seekdir

#include <sstream>
CPP
    # ccflags           => '-std=c++11',
    ccflags           => '-std=gnu++11',
    clean_after_build => 0,
    clean_build_area  => 0,
);

1;
__END__

这段代码在linux下编译时没有错误,但是在草莓perl 5.26.2 x64下它产生以下错误:

"D:\devel\perl\perl\bin\perl.exe" -MExtUtils::Command -e mv -- _2_pl_0f1f.xsc _2_pl_0f1f.c
g++  -s -O2 -DWIN32 -DWIN64 -DCONSERVATIVE -D__USE_MINGW_ANSI_STDIO -DPERL_TEXTMODE_SCRIPTS -DPERL_IMPLICIT_CONTEXT -DPERL_IMPLICIT_SYS -DUSE_PERLIO -fwrapv -fno-strict-aliasing -mms-bitfields  -xc++ -c  -I"D:/downloads/cpp-adaptive/cppAdaptive2/inline-src" -std=gnu++11 -s -O2   -DVERSION=\"0.00\" -DXS_VERSION=\"0.00\"  "-ID:\devel\perl\perl\lib\CORE"   _2_pl_0f1f.c
In file included from _2_pl_0f1f.xs:11:0:
D:\devel\perl\perl\lib\CORE/perl.h:3544:45: error: expected ')' before '*' token
 #    define PERL_GET_THX  ((PerlInterpreter *)PERL_GET_CONTEXT)
                                         ^
D:\devel\perl\perl\lib\CORE/perl.h:3544:45: error: expected ')' before '*' token
D:\devel\perl\perl\lib\CORE/perl.h:3544:45: error: expected ')' before '*' token
D:\devel\perl\perl\lib\CORE/perl.h:3544:45: error: expected ')' before '*' token
D:\devel\perl\perl\lib\CORE/perl.h:3544:29: error: expected ';' at end of member declaration
 #    define PERL_GET_THX  ((PerlInterpreter *)PERL_GET_CONTEXT)

... and so on ...

也许有人已经解决了类似的问题?

提问于
用户回答回答于

发生此错误是因为<sstream>恰好setbuf在内联函数中使用,隐式添加的头(可能XSUB.hperl.h?)中的哪一个已重新定义(使用预处理器#define)。

这个重定义因为使用了PerlInterpreter在不同命名空间中定义并且在这里不可见的类型(当然,宏忽略命名空间)而大声破解。

你可以通过添加代码来编译

#undef setbuf

包括之前<sstream>

扫码关注云+社区

领取腾讯云代金券