joeferner / node-java

Bridge API to connect with existing Java APIs.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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')