Я пытаюсь сделать приложение PNaCl, которое использует NaCl порт WebPorts в Perl, но я получаю странную ошибку при связывании. Вот простой код, который я пытался создать:
#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, но понятия не имею, что. Кто-нибудь знает что это значит?
Задача ещё не решена.
Других решений пока нет …