Building serialosc (also liblo, libmonome) on Windows 10 to add alternative detection methods

I am currently trying to get a neotrellis-monome with a teensy 3.2 to work with serialosc on Windows. This currently does not seem to work because Windows serialosc expects some FTDI registry entries that are just not in place when using a teensy. I’ve seen other people have this issue, but it seems so far no one has investigated and identified this problem before(?)

See also this thread:

So I’ve opened an issue on serialosc’s github page, and confirmed this with @artfwo (thanks!!!)

I’d like to attempt (however feeble my attempt may be) to build an alternative way for serialosc to detect connected devices, that does not rely on those particular Windows registry entries. This would hopefully enable also other devices to connect.

Currently I’m attempting to build the Windows version of serialosc, but failing miserably. I can build it on Ubuntu just fine, but can’t manage to cross compile it. I also did not manage to install it (liblo) with either cmake natively in a way that gets libmonome to compile, or with MSYS2 (also failing on libmonome, but differently).

While tinkering about is entertaining, I feel I have hit a roadblock.

If anyone has any tips on the most effective setup for this, it would be very much appreciated.

Current attempt

  1. installed MSYS2 (64bit)
  2. installed git, make, gcc, python using pacman
  3. checked out serialosc, libmonome, liblo (release 30) from github
  4. extract liblo
    .5 ./configure for liblo
  5. make install
  6. fails --> change example code from “usleep” to sleep to fix the build (alarm bells here, as this should not be called at all due to the “win32” ifdef before it???)
  7. make install again - works now
  8. libmonome --> ./waf configure - works
  9. ./waf --> fails

This error:

    [16/27] Linking build/src/cygmonome-1.dll
    /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: src/libmonome.c.6.o:libmonome.c:(.text+0xac): undefined reference to `monome_platform_get_dev_serial'
    src/libmonome.c.6.o:libmonome.c:(.text+0xac): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `monome_platform_get_dev_serial'
    /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: src/libmonome.c.6.o:libmonome.c:(.text+0x107): undefined reference to `monome_platform_load_protocol'
    src/libmonome.c.6.o:libmonome.c:(.text+0x107): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `monome_platform_load_protocol'
    /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: src/libmonome.c.6.o:libmonome.c:(.text+0x16c): undefined reference to `m_strdup'
    src/libmonome.c.6.o:libmonome.c:(.text+0x16c): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `m_strdup'
    /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: src/libmonome.c.6.o:libmonome.c:(.text+0x1c3): undefined reference to `m_free'
    src/libmonome.c.6.o:libmonome.c:(.text+0x1c3): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `m_free'
    /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: src/libmonome.c.6.o:libmonome.c:(.text+0x21d): undefined reference to `m_free'
    src/libmonome.c.6.o:libmonome.c:(.text+0x21d): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `m_free'
    /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: src/libmonome.c.6.o:libmonome.c:(.text+0x23a): undefined reference to `m_free'
    src/libmonome.c.6.o:libmonome.c:(.text+0x23a): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `m_free'
    /usr/lib/gcc/x86_64-pc-msys/9.3.0/../../../../x86_64-pc-msys/bin/ld: src/libmonome.c.6.o:libmonome.c:(.text+0x254): undefined reference to `monome_platform_free'
    src/libmonome.c.6.o:libmonome.c:(.text+0x254): relocation truncated to fit: R_X86_64_PC32 against undefined symbol `monome_platform_free'
    collect2: error: ld returned 1 exit status
    
    Waf: Leaving directory `/home/<user>/monome/libmonome/build'
    Build failed
     -> task in 'libmonome' failed with exit status 1 (run with -v to display more information)

I am stuck, I think. What am I doing wrong? Is this the entirely wrong way to go about it? Sorry, I can hold my own in Java and other techs, but it’s been a while since I worked with Linux, make and I’ve never used waf builds before.

it fails correctly. make sure that you’re running the “MingW64” shell provided by the msys installer and not the “MSYS2” shell (which you should only use for bootstrapping the build environment in the beginning).

FWIW - I’m pretty sure my neotrellis code that @nexnex is using can be flashed to any teensy 3.2 (or later I believe) for testing of device recognition.

In other words… someone else doesn’t need a full neotrellis grid to test this, just a teensy.

1 Like

Excellent point, @okyeron, so it should be fairly straightforward to test with any Windows machine and a teensy.

@artfwo:
Thanks for pointing that out. As you can tell, I am learning a lot but not quite self-sufficient yet, I am afraid. When trying with the MinGW 64bit, I get:

$ make install
Making install in src
make[1]: Entering directory '/home/<username>/monome/liblo-0.30/src'
Making install in .
make[2]: Entering directory '/home/<username>/monome/liblo-0.30/src'
  CC       liblo_la-address.lo
  CC       liblo_la-send.lo
  CC       liblo_la-message.lo
  CC       liblo_la-server.lo
  CC       liblo_la-method.lo
  CC       liblo_la-blob.lo
  CC       liblo_la-bundle.lo
  CC       liblo_la-timetag.lo
  CC       liblo_la-pattern_match.lo
  CC       liblo_la-version.lo
  CC       liblo_la-server_thread.lo
  CCLD     liblo.la
libtool:   error: can't build x86_64-w64-mingw32 shared library unless -no-undefined is specified
make[2]: *** [Makefile:728: liblo.la] Error 1
make[2]: Leaving directory '/home/<username>/monome/liblo-0.30/src'
make[1]: *** [Makefile:965: install-recursive] Error 1
make[1]: Leaving directory '/home/<username>/monome/liblo-0.30/src'
make: *** [Makefile:470: install-recursive] Error 1

Now, if I specify LDFLAGS=-no-undefined I get:

$ make LDFLAGS=-no-undefined install
Making install in src
make[1]: Entering directory '/home/<username>/monome/liblo-0.30/src'
Making install in .
make[2]: Entering directory '/home/<username>/monome/liblo-0.30/src'
  CCLD     liblo.la
  CC       testlo-testlo.o
  CCLD     testlo.exe
./.libs/lt-testlo.c: In function 'main':
./.libs/lt-testlo.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-testlo.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-testlo.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './testlo.exe': No such file
../libtool: line 11093: ./testlo.exe: No such file or directory
  CC       subtest-subtest.o
  CCLD     subtest.exe
./.libs/lt-subtest.c: In function 'main':
./.libs/lt-subtest.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-subtest.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-subtest.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './subtest.exe': No such file
../libtool: line 11093: ./subtest.exe: No such file or directory
  CC       test_bidirectional_tcp-test_bidirectional_tcp.o
  CCLD     test_bidirectional_tcp.exe
./.libs/lt-test_bidirectional_tcp.c: In function 'main':
./.libs/lt-test_bidirectional_tcp.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-test_bidirectional_tcp.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-test_bidirectional_tcp.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './test_bidirectional_tcp.exe': No such file
../libtool: line 11093: ./test_bidirectional_tcp.exe: No such file or directory
  CXX      cpp_test-cpp_test.o
  CXXLD    cpp_test.exe
./.libs/lt-cpp_test.c: In function 'main':
./.libs/lt-cpp_test.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-cpp_test.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-cpp_test.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './cpp_test.exe': No such file
../libtool: line 11093: ./cpp_test.exe: No such file or directory
make[3]: Entering directory '/home/<username>/monome/liblo-0.30/src'
 /usr/bin/mkdir -p '/mingw64/lib'
 /bin/sh ../libtool   --mode=install /usr/bin/install -c   liblo.la '/mingw64/lib'
libtool: install: /usr/bin/install -c .libs/liblo.dll.a /mingw64/lib/liblo.dll.a
libtool: install: base_file=`basename liblo.la`
libtool: install:  dlpath=`/bin/sh 2>&1 -c '. .libs/'liblo.la'i; echo liblo-7.dll'`
libtool: install:  dldir=/mingw64/lib/`dirname ../bin/liblo-7.dll`
libtool: install:  test -d /mingw64/lib/../bin || mkdir -p /mingw64/lib/../bin
libtool: install:  /usr/bin/install -c .libs/liblo-7.dll /mingw64/lib/../bin/liblo-7.dll
libtool: install:  chmod a+x /mingw64/lib/../bin/liblo-7.dll
libtool: install:  if test -n '' && test -n 'strip --strip-unneeded'; then eval 'strip --strip-unneeded /mingw64/lib/../bin/liblo-7.dll' || exit 0; fi
libtool: install: /usr/bin/install -c .libs/liblo.lai /mingw64/lib/liblo.la
make[3]: Nothing to be done for 'install-data-am'.
make[3]: Leaving directory '/home/<username>/monome/liblo-0.30/src'
make[2]: Leaving directory '/home/<username>/monome/liblo-0.30/src'
Making install in tools
make[2]: Entering directory '/home/<username>/monome/liblo-0.30/src/tools'
Making install in .
make[3]: Entering directory '/home/<username>/monome/liblo-0.30/src/tools'
  CC       oscsend-oscsend.o
  CCLD     oscsend.exe
./.libs/lt-oscsend.c: In function 'main':
./.libs/lt-oscsend.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-oscsend.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-oscsend.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './oscsend.exe': No such file
../../libtool: line 11093: ./oscsend.exe: No such file or directory
  CC       oscdump-oscdump.o
  CCLD     oscdump.exe
./.libs/lt-oscdump.c: In function 'main':
./.libs/lt-oscdump.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-oscdump.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-oscdump.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './oscdump.exe': No such file
../../libtool: line 11093: ./oscdump.exe: No such file or directory
  CC       oscsendfile-oscsendfile.o
  CCLD     oscsendfile.exe
./.libs/lt-oscsendfile.c: In function 'main':
./.libs/lt-oscsendfile.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-oscsendfile.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-oscsendfile.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './oscsendfile.exe': No such file
../../libtool: line 11093: ./oscsendfile.exe: No such file or directory
make[4]: Entering directory '/home/<username>/monome/liblo-0.30/src/tools'
  CCLD     oscsend.exe
./.libs/lt-oscsend.c: In function 'main':
./.libs/lt-oscsend.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-oscsend.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-oscsend.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './oscsend.exe': No such file
../../libtool: line 11093: ./oscsend.exe: No such file or directory
  CCLD     oscdump.exe
./.libs/lt-oscdump.c: In function 'main':
./.libs/lt-oscdump.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-oscdump.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-oscdump.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './oscdump.exe': No such file
../../libtool: line 11093: ./oscdump.exe: No such file or directory
  CCLD     oscsendfile.exe
./.libs/lt-oscsendfile.c: In function 'main':
./.libs/lt-oscsendfile.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-oscsendfile.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-oscsendfile.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './oscsendfile.exe': No such file
../../libtool: line 11093: ./oscsendfile.exe: No such file or directory
 /usr/bin/mkdir -p '/mingw64/bin'
make[4]: Nothing to be done for 'install-data-am'.
make[4]: Leaving directory '/home/<username>/monome/liblo-0.30/src/tools'
make[3]: Leaving directory '/home/<username>/monome/liblo-0.30/src/tools'
make[2]: Leaving directory '/home/<username>/monome/liblo-0.30/src/tools'
make[1]: Leaving directory '/home/<username>/monome/liblo-0.30/src'
Making install in examples
make[1]: Entering directory '/home/<username>/monome/liblo-0.30/examples'
  CC       example_client.o
  CCLD     example_client.exe
./.libs/lt-example_client.c: In function 'main':
./.libs/lt-example_client.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-example_client.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-example_client.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './example_client.exe': No such file
../libtool: line 11093: ./example_client.exe: No such file or directory
  CC       example_server.o
  CCLD     example_server.exe
./.libs/lt-example_server.c: In function 'main':
./.libs/lt-example_server.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-example_server.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-example_server.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './example_server.exe': No such file
../libtool: line 11093: ./example_server.exe: No such file or directory
  CC       nonblocking_server_example.o
  CCLD     nonblocking_server_example.exe
./.libs/lt-nonblocking_server_example.c: In function 'main':
./.libs/lt-nonblocking_server_example.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-nonblocking_server_example.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-nonblocking_server_example.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './nonblocking_server_example.exe': No such file
../libtool: line 11093: ./nonblocking_server_example.exe: No such file or directory
  CC       example_tcp_echo_server.o
  CCLD     example_tcp_echo_server.exe
./.libs/lt-example_tcp_echo_server.c: In function 'main':
./.libs/lt-example_tcp_echo_server.c:318:16: warning: implicit declaration of function '_spawnv' [-Wimplicit-function-declaration]
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                ^~~~~~~
./.libs/lt-example_tcp_echo_server.c:318:25: error: '_P_WAIT' undeclared (first use in this function)
  318 |   rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
      |                         ^~~~~~~
./.libs/lt-example_tcp_echo_server.c:318:25: note: each undeclared identifier is reported only once for each function it appears in
strip: './example_tcp_echo_server.exe': No such file
../libtool: line 11093: ./example_tcp_echo_server.exe: No such file or directory
  CXX      cpp_example.o
cpp_example.cpp: In function ‘int main()’:
cpp_example.cpp:96:9: error: ‘usleep’ was not declared in this scope; did you mean ‘sleep’?
   96 |         usleep(10*1000);
      |         ^~~~~~
      |         sleep
make[1]: *** [Makefile:466: cpp_example.o] Error 1
make[1]: Leaving directory '/home/<username>/monome/liblo-0.30/examples'
make: *** [Makefile:470: install-recursive] Error 1

Oh man, I feel like a complete noob right now…

you’re trying a difficult thing. i might suggest doing an easy thing, which will get you just as far.

you just need to convert serial (which is documented, because you have the source code) to OSC (which is also documented: https://monome.org/docs/serialosc/osc/)

for example, before serialosc even existed, i just used max/msp’s serial object and some simple patching.

a better/quicker solution for a DIY grid would be to just use python.

in my opinion this is a much better approach than trying to dive into the complexity of serialosc and make a fork. python is high level. any hack of serialosc is going to be a mess, unless you’re very proficient in C.

in fact, i believe someone may have already done this in the past (make a “serialosc” sort of bridge in python). anyone remember?

It’s been done in nodejs

Although… is this approach (repalce serialosc with something else) the best solution for the issue people have had with serialosc on windows10 with it not recognizing grids (not just DIY ones)?

Thanks a lot for chiming in - I was afraid that might be the case. I can very confidently say that I am not very proficient in C, as you can tell from this thread. I have implemented serial communication using Python in a couple of my other projects, though - so that might be an avenue to pursue.

I tried setting up the nodejs solution by @szymon_k referred to by @okyeron.

Unfortunately that also does not install…

C:\WINDOWS\system32>npm install -g node-serialoscd
C:\Users\thomassteirer\AppData\Roaming\npm\serialoscd -> C:\Users\thomassteirer\AppData\Roaming\npm\node_modules\node-serialoscd\index.js

> @serialport/bindings@2.0.8 install C:\Users\thomassteirer\AppData\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings
> prebuild-install --tag-prefix @serialport/bindings@ || node-gyp rebuild

prebuild-install WARN install No prebuilt binaries found (target=13.0.1 runtime=node arch=x64 libc= platform=win32)

C:\Users\thomassteirer\AppData\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings>if not defined npm_config_node_gyp (node "C:\Program Files\nodejs\node_modules\npm\node_modules\npm-lifecycle\node-gyp-bin\\..\..\node_modules\node-gyp\bin\node-gyp.js" rebuild )  else (node "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-gyp.js" rebuild )
Building the projects in this solution one at a time. To enable parallel build, please add the "-m" switch.
  serialport.cpp
  serialport_win.cpp
  win_delay_load_hook.cc
C:\Users\thomassteirer\AppData\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings\src\serialpor
t.cpp(329,96): error C2661: 'v8::Object::Set': no overloaded function takes 2 arguments [C:\Users\thomassteirer\AppData
\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings\build\bindings.vcxproj]
C:\Users\thomassteirer\AppData\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings\src\serialpor
t.cpp(330,96): error C2661: 'v8::Object::Set': no overloaded function takes 2 arguments [C:\Users\thomassteirer\AppData
\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings\build\bindings.vcxproj]
C:\Users\thomassteirer\AppData\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings\src\serialpor
t.cpp(331,96): error C2661: 'v8::Object::Set': no overloaded function takes 2 arguments [C:\Users\thomassteirer\AppData
\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings\build\bindings.vcxproj]
C:\Users\thomassteirer\AppData\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings\src\serialpor
t.cpp(378,106): error C2661: 'v8::Object::Set': no overloaded function takes 2 arguments [C:\Users\thomassteirer\AppDat
a\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings\build\bindings.vcxproj]
gyp ERR! build error
gyp ERR! stack Error: `C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\MSBuild.exe` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onExit (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\build.js:194:23)
gyp ERR! stack     at ChildProcess.emit (events.js:210:5)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:272:12)
gyp ERR! System Windows_NT 10.0.18363
gyp ERR! command "C:\\Program Files\\nodejs\\node.exe" "C:\\Program Files\\nodejs\\node_modules\\npm\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\thomassteirer\AppData\Roaming\npm\node_modules\node-serialoscd\node_modules\@serialport\bindings
gyp ERR! node -v v13.0.1
gyp ERR! node-gyp -v v5.0.5
gyp ERR! not ok
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! @serialport/bindings@2.0.8 install: `prebuild-install --tag-prefix @serialport/bindings@ || node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the @serialport/bindings@2.0.8 install script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\thomassteirer\AppData\Roaming\npm-cache\_logs\2020-06-09T06_11_52_207Z-debug.log

I know next to nothing about nodejs/JS coding, so unless this error is easily fixable, I’m thinking about a simple python serialoscd implementation as proposed by @tehn using the stack I’ve used previously (unless there are already some implementations available - but my google-fu turned up nothing).

To be honest I was caught a bit by surprise that this issue hit me/was pinpointed that late in the process (i.e. after building the device and quite a bit of diving and awesome and patient support by @okyeron), as things seem to be fairly compatible/more easily fixable on other platforms.

in case you decide to pursue this further, keep in mind that this shouldn’t happen on mingw either, as -no-undefined is part of windows-specific LDFLAGS already in liblo. maybe try re-running ./configure after switching the build env.

@artfwo Hmm - I actually did that, to no effect. I even reinstalled the mingw from scratch and checked out the repo. But maybe I made a mistake somewhere along the lines.

As recommended by @tehn in the other thread, I have started with an implementation of serialoscd on python.

Currently the OSC receiving part is implemented, and I am working on the interaction on the serial side of things right now. Afterwards, I will put the two together, and also have autodetection of devices if possible, using a modified version of the com-port-listing from pyserial.

1 Like