Skip to content

missing symbol called #568

Description

@MirrorHuang

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?

Activity

  1. kernoeb commented on Jun 21, 2023

    @kernoeb

    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.

  2. kernoeb commented on Jul 14, 2023

    @kernoeb

    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')
  3. arimus commented on Feb 1, 2025

    @arimus

    I've managed to get things working under Rosetta, which can be documented for the next person running into it. As mentioned, you can fully move everything into the arm64 space, however you can also move everything into the x64 space and execute under Rosetta. However, this requires downloading a JVM which is an x64 build manually and setting your JAVA_HOME to the absolute path of that installation.

    I did this with:

    node v20.12.0 (still issues building with node v22 unfortunately due to the node API mismatch #580)
    jdk-21.0.6.jdk from here: https://www.oracle.com/java/technologies/downloads/?er=221886#jdk21-mac

    And I did patch the compile-java.sh so that I could use a newer java version:

    #javah -classpath src-java -d ./src node.NodeDynamicProxyClass
    javac -classpath src-java -h src src-java/node/NodeDynamicProxyClass.java

    All tests pass.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions