ced-dev / piface

Raspberry PiFace and NodeJS
MIT License
4 stars 4 forks source link

Help wanted on update to official libpifacedigital.. #1

Closed spacepope closed 7 years ago

spacepope commented 7 years ago

Hi,

i just forked your wrapper project with the intention to update it to the official libpifacedigital, as the package from Thomas macPherson now refers to use that instead of his project.. There are also some more functionalities like interrupt enabling which would be nice to have.

What i've done so far:

But i could not get it to work: the install process and gyp rebuild succeed with

> node-gyp rebuild

make: Entering directory 'piface/build'
  CXX(target) Release/obj.target/pfio/pfio.o
  SOLINK_MODULE(target) Release/obj.target/pfio.node
  COPY Release/pfio.node
make: Leaving directory 'piface/build'

but a small test with

const piface = require("piface");
piface.init(0);

fails with

node: symbol lookup error: piface/build/Release/pfio.node: undefined symbol: mcp23s17_open

The libraries and includes are present, ls -l /usr/local/lib && ls -l /usr/local/include shows

...
-rwxr-xr-x 1 root root      7224 Jul 15 13:45 libmcp23s17.a
-rwxr-xr-x 1 root root      4684 Jul 15 14:13 libpifacedigital.a
...
-rwxr-xr-x 1 root root   5940 Jul 15 13:45 mcp23s17.h
-rwxr-xr-x 1 root root   6717 Jul 15 14:13 pifacedigital.h
...

nm -C piface/build/Release/pfio.node gives

00012210 B _bss_end__
00012210 B __bss_end__
00012204 B __bss_start
00012204 B __bss_start__
00001e68 r bus
00001080 t call_weak_fn
00001e6c r chip_select
         U close@@GLIBC_2.4
00012204 b completed.9004
         w __cxa_finalize@@GLIBC_2.4
000010a4 t deregister_tm_clones
00001140 t __do_global_dtors_aux
00012008 t __do_global_dtors_aux_fini_array_entry
000121dc d __dso_handle
00012010 a _DYNAMIC
00012204 D _edata
00012210 B _end
00012210 B __end__
00001df4 T _fini
000011a8 t frame_dummy
00012000 t __frame_dummy_init_array_entry
00001ef0 r __FRAME_END__
         U fwrite@@GLIBC_2.4
00012118 a _GLOBAL_OFFSET_TABLE_
         w __gmon_start__
00000eb4 T _init
         w _ITM_deregisterTMCloneTable
         w _ITM_registerTMCloneTable
0001200c d __JCR_END__
0001200c d __JCR_LIST__
         w _Jv_RegisterClasses
         U mcp23s17_disable_interrupts
         U mcp23s17_enable_interrupts
0001220c b mcp23s17_fd
         U mcp23s17_open
         U mcp23s17_read_bit
         U mcp23s17_read_reg
         U mcp23s17_wait_for_interrupt
         U mcp23s17_write_bit
         U mcp23s17_write_reg
         U node_module_register
00012208 b pfd_count
00001a80 T pifacedigital_close
00001ce0 T pifacedigital_digital_read
00001d18 T pifacedigital_digital_write
00001d74 T pifacedigital_disable_interrupts
00001d5c T pifacedigital_enable_interrupts
0000192c T pifacedigital_open
00001840 T pifacedigital_open_noinit
00001c1c T pifacedigital_read_bit
00001b78 T pifacedigital_read_reg
00001d8c T pifacedigital_wait_for_input
00001c70 T pifacedigital_write_bit
00001bd0 T pifacedigital_write_reg
00001060 t _register_pfio
000010f0 t register_tm_clones
         U stderr@@GLIBC_2.4
00012204 d __TMC_END__
0000124c T PfioDeinit(v8::FunctionCallbackInfo<v8::Value> const&)
00001364 T PfioReadInput(v8::FunctionCallbackInfo<v8::Value> const&)
000013bc T PfioReadOutput(v8::FunctionCallbackInfo<v8::Value> const&)
00001294 T PfioDigitalRead(v8::FunctionCallbackInfo<v8::Value> const&)
00001414 T PfioWriteOutput(v8::FunctionCallbackInfo<v8::Value> const&)
000012e4 T PfioDigitalWrite(v8::FunctionCallbackInfo<v8::Value> const&)
00001494 T init(v8::Local<v8::Object>)
000011f4 T PfioInit(v8::FunctionCallbackInfo<v8::Value> const&)
000121e0 d _module
         U v8::HandleScope::HandleScope(v8::Isolate*)
         U v8::HandleScope::~HandleScope()
         U v8::FunctionTemplate::GetFunction()
         U v8::FunctionTemplate::New(v8::Isolate*, void (*)(v8::FunctionCallbackInfo<v8::Value> const&), v8::Local<v8::Value>, v8::Local<v8::Signature>, int)
         U v8::Object::Set(v8::Local<v8::Value>, v8::Local<v8::Value>)
         U v8::String::NewFromUtf8(v8::Isolate*, char const*, v8::String::NewStringType, int)
         U v8::Integer::New(v8::Isolate*, int)
         U v8::Isolate::GetCurrent()
         U v8::Function::SetName(v8::Local<v8::String>)
         U v8::Value::IntegerValue() const
         U v8::Integer::Value() const

I have absolutely no clue why mcp23s17_open is undefined or not found at runtime, but i have no experience on native node wrappers and gyp. Do you have any hint what's going wrong here?

spacepope commented 7 years ago

Tried to include with extern C in the pfio.cc file like

#include <node.h>
#include <v8.h>
extern "C" {
    #include <pifacedigital.h>
}

But still no success :(

To hopefully get more info on the linking process, i added 'ldflags': ['-Wl,--verbose'] to the binding.gyp file. The output shows that the library files are found:

==================================================
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/crti.o succeeded
/usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/crti.o
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/crtbeginS.o succeeded
/usr/lib/gcc/arm-linux-gnueabihf/4.9/crtbeginS.o
attempt to open Release/obj.target/pfio/pfio.o succeeded
Release/obj.target/pfio/pfio.o
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libmcp23s17.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libmcp23s17.a failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libmcp23s17.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libmcp23s17.a failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../libmcp23s17.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../libmcp23s17.a failed
attempt to open /lib/arm-linux-gnueabihf/libmcp23s17.so failed
attempt to open /lib/arm-linux-gnueabihf/libmcp23s17.a failed
attempt to open /usr/lib/arm-linux-gnueabihf/libmcp23s17.so failed
attempt to open /usr/lib/arm-linux-gnueabihf/libmcp23s17.a failed
attempt to open /usr/local/lib/libmcp23s17.so failed
attempt to open /usr/local/lib/libmcp23s17.a succeeded
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libpifacedigital.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libpifacedigital.a failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libpifacedigital.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libpifacedigital.a failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../libpifacedigital.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../libpifacedigital.a failed
attempt to open /lib/arm-linux-gnueabihf/libpifacedigital.so failed
attempt to open /lib/arm-linux-gnueabihf/libpifacedigital.a failed
attempt to open /usr/lib/arm-linux-gnueabihf/libpifacedigital.so failed
attempt to open /usr/lib/arm-linux-gnueabihf/libpifacedigital.a failed
attempt to open /usr/local/lib/libpifacedigital.so failed
attempt to open /usr/local/lib/libpifacedigital.a succeeded
(/usr/local/lib/libpifacedigital.a)pifacedigital.o
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libstdc++.so succeeded
-lstdc++ (/usr/lib/gcc/arm-linux-gnueabihf/4.9/libstdc++.so)
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libm.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libm.a failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libm.so succeeded
-lm (/usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libm.so)
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc_s.so succeeded
opened script file /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc_s.so
opened script file /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc_s.so
attempt to open libgcc_s.so.1 failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc_s.so.1 succeeded
libgcc_s.so.1 (/usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc_s.so.1)
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc.a succeeded
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libpthread.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libpthread.a failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libpthread.so succeeded
opened script file /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libpthread.so
opened script file /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libpthread.so
attempt to open /lib/arm-linux-gnueabihf/libpthread.so.0 succeeded
/lib/arm-linux-gnueabihf/libpthread.so.0
attempt to open /usr/lib/arm-linux-gnueabihf/libpthread_nonshared.a succeeded
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libc.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libc.a failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libc.so succeeded
opened script file /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libc.so
opened script file /usr/lib/gcc/arm-linux-gnueabihf/4.9/../../../arm-linux-gnueabihf/libc.so
attempt to open /lib/arm-linux-gnueabihf/libc.so.6 succeeded
/lib/arm-linux-gnueabihf/libc.so.6
attempt to open /usr/lib/arm-linux-gnueabihf/libc_nonshared.a succeeded
attempt to open /lib/arm-linux-gnueabihf/ld-linux-armhf.so.3 succeeded
/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc_s.so succeeded
opened script file /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc_s.so
opened script file /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc_s.so
attempt to open libgcc_s.so.1 failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc_s.so.1 succeeded
libgcc_s.so.1 (/usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc_s.so.1)
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc.so failed
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/libgcc.a succeeded
attempt to open /usr/lib/gcc/arm-linux-gnueabihf/4.9/crtendS.o succeeded

but ldd -r piface/build/Release/pfio.node shows

        linux-vdso.so.1 (0x7ef08000)
        /usr/lib/arm-linux-gnueabihf/libarmmem.so (0x76f06000)
        libstdc++.so.6 => /usr/lib/arm-linux-gnueabihf/libstdc++.so.6 (0x76e18000)
        libm.so.6 => /lib/arm-linux-gnueabihf/libm.so.6 (0x76d9d000)
        libgcc_s.so.1 => /lib/arm-linux-gnueabihf/libgcc_s.so.1 (0x76d70000)
        libpthread.so.0 => /lib/arm-linux-gnueabihf/libpthread.so.0 (0x76d48000)
        libc.so.6 => /lib/arm-linux-gnueabihf/libc.so.6 (0x76c07000)
        /lib/ld-linux-armhf.so.3 (0x54ae2000)
undefined symbol: mcp23s17_wait_for_interrupt   (../piface/build/Release/pfio.node)
undefined symbol: _ZN2v816FunctionTemplate11GetFunctionEv       (../piface/build/Release/pfio.node)
undefined symbol: mcp23s17_read_bit     (../piface/build/Release/pfio.node)
undefined symbol: mcp23s17_disable_interrupts   (../piface/build/Release/pfio.node)
undefined symbol: _ZN2v87Integer3NewEPNS_7IsolateEi     (../piface/build/Release/pfio.node)
undefined symbol: mcp23s17_write_bit    (../piface/build/Release/pfio.node)
undefined symbol: _ZNK2v85Value12IntegerValueEv (../piface/build/Release/pfio.node)
undefined symbol: mcp23s17_read_reg     (../piface/build/Release/pfio.node)
undefined symbol: mcp23s17_write_reg    (../piface/build/Release/pfio.node)
undefined symbol: _ZN2v811HandleScopeC1EPNS_7IsolateE   (../piface/build/Release/pfio.node)
undefined symbol: _ZN2v86Object3SetENS_5LocalINS_5ValueEEES3_   (../piface/build/Release/pfio.node)
undefined symbol: _ZNK2v87Integer5ValueEv       (../piface/build/Release/pfio.node)
undefined symbol: mcp23s17_open (../piface/build/Release/pfio.node)
undefined symbol: _ZN2v816FunctionTemplate3NewEPNS_7IsolateEPFvRKNS_20FunctionCallbackInfoINS_5ValueEEEENS_5LocalIS4_EENSA_INS_9SignatureEEEi    (../piface/build/Release/pfio.node)
undefined symbol: node_module_register  (../piface/build/Release/pfio.node)
undefined symbol: mcp23s17_enable_interrupts    (../piface/build/Release/pfio.node)
undefined symbol: _ZN2v811HandleScopeD1Ev       (../piface/build/Release/pfio.node)
undefined symbol: _ZN2v88Function7SetNameENS_5LocalINS_6StringEEE       (../piface/build/Release/pfio.node)
undefined symbol: _ZN2v86String11NewFromUtf8EPNS_7IsolateEPKcNS0_13NewStringTypeEi      (../piface/build/Release/pfio.node)
undefined symbol: _ZN2v87Isolate10GetCurrentEv  (../piface/build/Release/pfio.node)
spacepope commented 7 years ago

Wow, solved it by accident. Order of linked library matters!

-lpifacedigital must be first in binding.gyp, then -lmcp23s17