I am trying to compile a node module.  I had two methods in mind, both of 
which have failed and I would appreciate some help.

First, I tried to compile the module without using node-waf.
I attempted this according to the instructions found in the second question 
here 
http://stackoverflow.com/questions/6662251/build-node-js-addon-without-node-waf 
. 
The test example compiles into a node module at least but does not load in 
node.  The error is simply cannot load shared module.

I switched to using node-waf with the build script below.  In this case I 
compile my external code into a static library and try to link within 
node-waf. I admit I have a poor understanding of node-waf, but want things 
to just work.
I tried using uselib='MOVE_HEAD' and also I tried using   
bld.env.append_value('LINKFLAGS', '-lmove_head') as suggested in a similar 
topic in this group , but both of these result in the same problem:
The module, compiles and loads, but when I attempt to call a function which 
should be statically linked, I get the following fatal error.

dyld: lazy symbol binding failed: Symbol not found: 
__ZN4yarp2os7Network4initEv
  Referenced from: 
/Users/zennatavares/repos/robocop/cxx/build/Release/hello.node
  Expected in: flat namespace

dyld: Symbol not found: __ZN4yarp2os7Network4initEv
  Referenced from: 
/Users/zennatavares/repos/robocop/cxx/build/Release/hello.node
  Expected in: flat namespace

*Thank you,* code snippets below:

*My wscript:*

srcdir = '.'
blddir = 'build'
VERSION = '0.0.1'

def set_options(opt):
  opt.tool_options('compiler_cxx')

def configure(conf):
  conf.check_tool('compiler_cxx')
  conf.check_tool('node_addon')
  libpath = ['/Users/zennatavares/repos/robocop/build/cxx']
  includes = ['/Users/zennatavares/repos/robocop/cxx']
  libmove_head = conf.check(lib="move_head",
          libpath=libpath,
          uselib_store='MOVE_HEAD',
          mandatory=True)  

def build(bld):
  obj = bld.new_task_gen('cxx', 'shlib', 'node_addon', uselib='MOVE_HEAD')
  bld.env.append_value('LINKFLAGS', '-lmove_head')
  obj.target = 'hello'
  obj.source = 'hello.cc'

*And for good measure my simple module:*

#include <node.h>
#include <v8.h>
#include "move_head.h"

using namespace v8;

Handle<Value> Method(const Arguments& args) {
  HandleScope scope;
  move_head(0,69);
  return scope.Close(String::New("world"));
}

void init(Handle<Object> target) {
  target->Set(String::NewSymbol("hello"),
      FunctionTemplate::New(Method)->GetFunction());
}
NODE_MODULE(hello, init)

-- 
Job Board: http://jobs.nodejs.org/
Posting guidelines: 
https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines
You received this message because you are subscribed to the Google
Groups "nodejs" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/nodejs?hl=en?hl=en

Reply via email to