2

I'm trying to make a PNaCl application that uses WebPorts's NaCl port of Perl, but I'm getting a strange error when linking it. Here's the simple code I was trying to build:

#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();
  }
}

And for building:

$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

But at linking I'm getting this cryptic error:

/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

I'm obviously doing something wrong when linking to Perl, but I have no idea what. Does anyone know what this means?

a spaghetto
  • 1,072
  • 2
  • 14
  • 22

0 Answers0