gpt4 book ai didi

c++ - Strawberry perl + Inline::CPP + 未编译

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:20:39 24 4
gpt4 key购买 nike

也许有人可以帮助我理解。为什么会出现这个错误。我正在尝试构建使用 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 下编译没有错误,但在 strawberry 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在内联函数中,哪个隐式添加的 header (可能是 XSUB.hperl.h ?)已重新定义(使用预处理器 #define )。

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

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

#undef setbuf

在包含 <sstream> 之前.

关于c++ - Strawberry perl + Inline::CPP + <sstream> 未编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50670001/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com