What does `ldd freeling.node` say (assuming you're on Linux)? On Wed, Mar 28, 2012 at 10:51 PM, rhasson <rhas...@gmail.com> wrote:
> Nathan, > > I have a question about node-gyp. I have a native library that I'm > building a node binding for. that library (freeling) has been > built separately and in the build directory has an include and lib folders > with the headers and .so files. > I built my module (the node binding to freeling), everything compiles fine > but when I try to require the module in node I get the following error: > > require('./freeling') > Error: libfreeling-3.0-alfa1.so: cannot open shared object file: No such > file or directory > at Object..node (module.js:476:11) > at Module.load (module.js:352:32) > at Function._load (module.js:310:12) > at Module.require (module.js:358:17) > at require (module.js:374:17) > at repl:1:2 > at REPLServer.eval (repl.js:85:21) > at Interface.<anonymous> (repl.js:202:12) > at Interface.emit (events.js:67:17) > at Interface._onLine (readline.js:169:10) > > Here is my binding.gyp file: > > { > 'targets': [ > { > 'target_name': 'freeling', > 'type': 'loadable_module', > 'product_extension': 'node', > 'product_prefix': '', > 'include_dirs': ['/home/roy/freeling/free3/include'], > 'libraries': [ > '/home/roy/freeling/free3/lib/libfreeling.so', > '/home/roy/freeling/free3/lib/libfreeling-3.0-alfa1.so' > ], > 'sources': ['freeling.cc', 'freeling_tokenizer.cc'] > } > ] > } > > I'm not sure I'm doing this correctly. Basically, I need to link by > module to the freeling headers and object files so it recognizes the > freeling classes and functions I'll be calling from within my module. > > Thanks, > Roy > > On Wednesday, March 28, 2012 12:38:29 AM UTC-4, rhasson wrote: >> >> Never mind, I found the problem. >> >> In my .cc file I was declaring the function as GetWString() instead of >> FreeLingTokenizer::GetWString(**). After adding the scope it was ok. >> Now I have another bug but I'll spare you my debugging unless I get stuck. >> >> Thank you, switching to 0.7.6 and node-gyp was a great idea, at least now >> I get real error messages that I can debug. >> >> Roy >> >> On Wednesday, March 28, 2012 12:29:48 AM UTC-4, rhasson wrote: >>> >>> Ok, so I installed 0.7.6 and compiled with node-gyp fine and this time a >>> little more details but I'm not sure how to resolve this issue. >>> >>> > process.version >>> 'v0.7.6' >>> > l = require('./freeling.node') >>> Error: /home/roy/freeling/node_bind/**build/Debug/freeling.node: >>> undefined symbol: _**ZN17FreeLingTokenizer10GetWStr** >>> ingEN2v86HandleINS0_6StringEEE >>> at Object..node (module.js:476:11) >>> at Module.load (module.js:352:32) >>> at Function._load (module.js:310:12) >>> at Module.require (module.js:358:17) >>> at require (module.js:374:17) >>> at repl:1:6 >>> at REPLServer.eval (repl.js:85:21) >>> at Interface.<anonymous> (repl.js:202:12) >>> at Interface.emit (events.js:67:17) >>> at Interface._onLine (readline.js:169:10) >>> >>> Inside my class declaration under private I have this: >>> static std::wstring GetWString(v8::Handle<v8::**String> str); >>> >>> Then in my .cc file I have the actual function: >>> // Convert a V8 string to a wide string. >>> std::wstring GetWString(v8::Handle<v8::**String> str) { >>> v8::HandleScope scope; >>> >>> uint16_t* buf = new uint16_t[str->Length()+1]; >>> str->Write(buf); >>> std::wstring value = reinterpret_cast<wchar_t*>(**buf); >>> delete [] buf; >>> >>> return value; >>> } >>> >>> I'm not sure why the error is "undefined symbol". >>> >>> Thanks, >>> Roy >>> >>> On Monday, March 26, 2012 5:30:29 PM UTC-4, SteveCronin wrote: >>>> >>>> I'm getting an error when I 'require' a module I have built. >>>> >>>> Is this a 32/64bit issue? If so how do I best correct for future node >>>> compatibility? >>>> >>>> node 0.6.13 on Mac OS X 10.7.3 >>>> >>>> I'm still using node-waf to manually compile modules -- is that the >>>> problem? >>>> Here's the wscript: >>>> srcdir = '.' >>>> blddir = 'build' >>>> VERSION = '1.0.0' >>>> APPNAME = 'XYZ-ABC-utils' >>>> >>>> def set_options(opt): >>>> opt.tool_options('compiler_**cxx') >>>> >>>> def configure(conf): >>>> conf.check_tool('compiler_cxx'**) >>>> conf.check_tool('node_addon') >>>> >>>> def build(bld): >>>> obj = bld.new_task_gen('cxx', 'shlib', 'node_addon') >>>> obj.source = 'node-ABC-support.cc', 'ABC1-support.cc', >>>> 'ABC2-support.cc', 'ABC3-support.cc' >>>> obj.libpath = [ bld.path.abspath() ] >>>> obj.lib = 'GHJ.o' >>>> bld.env.append_value('**LINKFLAGS', '-lcrypto -lssl -lz'.split()) >>>> obj.target = 'XYZ-ABC-utils' >>>> >>>> Even if I add this line to the script I still get the same errors: >>>> >>>> obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", >>>> "-D_LARGEFILE_SOURCE"] >>>> >>> >>> On Monday, March 26, 2012 5:30:29 PM UTC-4, SteveCronin wrote: >>>> >>>> I'm getting an error when I 'require' a module I have built. >>>> >>>> Is this a 32/64bit issue? If so how do I best correct for future node >>>> compatibility? >>>> >>>> node 0.6.13 on Mac OS X 10.7.3 >>>> >>>> I'm still using node-waf to manually compile modules -- is that the >>>> problem? >>>> Here's the wscript: >>>> srcdir = '.' >>>> blddir = 'build' >>>> VERSION = '1.0.0' >>>> APPNAME = 'XYZ-ABC-utils' >>>> >>>> def set_options(opt): >>>> opt.tool_options('compiler_**cxx') >>>> >>>> def configure(conf): >>>> conf.check_tool('compiler_cxx'**) >>>> conf.check_tool('node_addon') >>>> >>>> def build(bld): >>>> obj = bld.new_task_gen('cxx', 'shlib', 'node_addon') >>>> obj.source = 'node-ABC-support.cc', 'ABC1-support.cc', >>>> 'ABC2-support.cc', 'ABC3-support.cc' >>>> obj.libpath = [ bld.path.abspath() ] >>>> obj.lib = 'GHJ.o' >>>> bld.env.append_value('**LINKFLAGS', '-lcrypto -lssl -lz'.split()) >>>> obj.target = 'XYZ-ABC-utils' >>>> >>>> Even if I add this line to the script I still get the same errors: >>>> >>>> obj.cxxflags = ["-g", "-D_FILE_OFFSET_BITS=64", >>>> "-D_LARGEFILE_SOURCE"] >>>> >>> -- > 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 nodejs@googlegroups.com > To unsubscribe from this group, send email to > nodejs+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/nodejs?hl=en?hl=en > -- 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 nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en