Perl の WebPorts の NaCl ポートを使用する PNaCl アプリケーションを作成しようとしていますが、リンクすると奇妙なエラーが発生します。作成しようとしていた簡単なコードは次のとおりです。
#include <EXTERN.h>
#include <perl.h>
#include <ppapi/cpp/instance.h>
#include <ppapi/cpp/module.h>
#include <ppapi/cpp/var.h>
namespace interp {
PerlInterpreter *my_perl;
}
class PerlTest : public pp::Instance {
static void perltest_init() {
using namespace interp;
if (my_perl == NULL) return;
char *params[] = {"", "-e", ""};
my_perl = perl_alloc();
perl_construct(my_perl);
perl_parse(my_perl, NULL, 3, params, NULL);
PL_exit_flags |= PERL_EXIT_DESTRUCT_END;
perl_run(my_perl);
}
static void perltest_destroy() {
using namespace interp;
perl_destruct(my_perl);
perl_free(my_perl);
}
public:
explicit PerlTest(PP_Instance instance) : pp::Instance(instance) {
perltest_init();
}
virtual ~PerlTest() {
perltest_destroy();
}
virtual void HandleMessage(const pp::Var &var) {
using namespace interp;
std::string message = var.AsString();
if(message == "test") {
SV* result = eval_pv("2 + 2", TRUE);
PostMessage(pp::Var(SvNV(result)));
}
}
};
class PerlTestModule : public pp::Module {
public:
PerlTestModule() : pp::Module() {}
virtual ~PerlTestModule() {}
virtual pp::Instance* CreateInstance(PP_Instance instance) {
return new PerlTest(instance);
}
};
namespace pp {
Module* CreateModule() {
return new PerlTestModule();
}
}
そして構築のために:
$NACL_SDK/toolchain/linux_pnacl/bin/pnacl-clang++ test.cpp -c -I$NACL_SDK/include/ -I$WEB_PORTS/out/build/perl/perl-5.20.2/ -o test.o -O2 --pnacl-driver-verbose
$NACL_SDK/toolchain/linux_pnacl/bin/pnacl-ld -L$NACL_SDK/lib/pnacl/Release/ -L$WEB_PORTS/out/build/perl/perl-5.20.2/ $WEB_PORTS/out/build/nacl-spawn/build_pnacl/libnacl_spawn.a test.o -lppapi_cpp -lppapi -lperl -o test.pexe
しかし、リンクすると、次の不可解なエラーが発生します。
/home/quartata/Downloads/nacl_sdk/pepper_49/toolchain/linux_pnacl/bin/le32-nacl-ld.gold: internal error in target, at ../../../src/binutils/gold/parameters.h:105
Perl にリンクするときに明らかに何か間違ったことをしているのですが、何が原因かわかりません。これが何を意味するか知っている人はいますか?