What does `ldd freeling.node` say (assuming you're on Linux)?
On Wed, Mar 28, 2012 at 10:51 PM, rhasson <[email protected]> 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 [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
>
--
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