missing symbol called
MirrorHuang opened this issue · comments
When I try to do something like this (i.e. basic stuff)…
var java = require("java");
var list = java.newInstanceSync("java.util.ArrayList");
list.size();
…I get an error like this:
dyld[83934]: missing symbol called
environment
java: v1.8
node: v16.14.1
Any idea what’s going wrong?
I'm able to reproduce this issue when I use Node 16/18
+ arch x64
on macOS Monterey : Macbook Pro M1 (ARM).
arch -x86_64 zsh
nvm use 18
node main.js
---> dyld[7497]: missing symbol called
If I build the native module in ARM, and use Node.js ARM (process.arch
), it works, but if I build the nodejavabridge
in x64 arch, it gives me "missing symbol called" too.
I also tried to build the native module on a real x64 macOS virtual machine, then force use it by patch-packaging the bridge, without success.
Just for context, I'm using pkg
, I would like to build a x64 executable and run it with Rosetta.
Update :
Thanks to https://groups.google.com/g/node-java/c/Yj4F7Zrbb0k, I succeed to use Java when DYLD_INSERT_LIBRARIES
environment variable is set :
process.env.DYLD_INSERT_LIBRARIES = path.join(jrePath, 'lib', 'server', 'libjvm.dylib')