c – Strawberry perl Inline :: CPP未编译

也许有人可以帮我理解.为什么会出现此错误.
我正在尝试构建使用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.h或perl.h?)已经重新定义(使用预处理器#define).

这种重新定义会大声破坏,因为它使用PerlInterpreter类型,该类型在不同的命名空间中定义,在此处不可见(当然,宏忽略命名空间).

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

#undef setbuf

包括< sstream>之前.

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录&lt;future&gt;future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...