我正在尝试制作一个使用WebPorts 的 Perl 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 时,我显然做错了什么,但我不知道是什么。有谁知道这意味着什么?