dyld: 未找到符号: _JNI_CreateJavaVM

2022-09-04 23:41:41

此错误是什么意思?

我需要做些什么来解决这个问题?

我正在尝试在Mac OS El Captain上运行基于java的node.js(特别是xslt4node)模块,但每次我都会收到此错误。对于Windows用户来说,一切似乎都正常。完整的错误如下:

dyld:惰性符号绑定失败:找不到符号:_JNI_CreateJavaVM 引用自:/projects/main-project/node_modules/java/build/Release/nodejavabridge_bindings.node 预期于:平面命名空间

dyld: 找不到符号: _JNI_CreateJavaVM 引用自: /projects/main-project/node_modules/java/build/Release/nodejavabridge_bindings.node Expected in: flat namespace

我发现架构x86_64的未定义符号:JNI_CreateJavaVM OS-X Xcode,这是我能找到的最接近的符号,可以解释我的确切问题,但我没有使用xcode进行开发,我在一个节点.js平台上。

以前有没有人见过这个?这是什么意思?

到目前为止,我已经尝试过:

  1. 更改 Java 版本
  2. 删除和重建node_moudles
  3. 添加 JVM 功能<string>JNI</string>
  4. 卸载Java,根据此处的文档:https://www.java.com/en/download/help/mac_uninstall_java.xml 运行这些命令没有任何作用:

user:~ kawnah$ sudo rm -fr /Library/PreferencePanes/JavaControlPanel.prefPane user:~ kawnah$ sudo rm -fr ~/Library/Application\ Support/Java user:~ kawnah$ java -version java version “9.0.1” Java(TM) SE Runtime Environment (build 9.0.1+11) Java HotSpot(TM) 64-Bit Server VM (build 9.0.1+11, mixed mode)

  1. 尝试不同版本的节点 (7.10.0)
  2. 完全卸载 node/npm,并重新安装

答案 1

基本上,此错误告诉您的是,您尝试使用的此模块中文件的符号链接存在问题。

Mac OS X的DYLD是操作系统的动态链接器。它的工作或多或少是在请求资源时为操作系统加载共享库。

发生这种情况的原因有很多,从模块本身的更新过程失败到驱动损坏等。

针对此特定问题的最常见修复 (1) 是删除node_modules文件夹,并在本地和全局目录中运行新的 NPM 安装:

rm -rf node_modules/
npm install

您也可以尝试 npm 重建,但全新安装通常是最佳途径。


  1. 从这里接受的答案

答案 2

尝试通过在 JVMCapabilities 中编辑和添加 JNI 作为选项来手动启用 JNI:/Library/Java/JavaVirtualMachines/<version>.jdk/Contents/Info.plist

<key>JVMCapabilities</key>
<array>
    ...
    <string>JNI</string>
</array>

https://github.com/joeferner/node-java/issues/223#issuecomment-110408072


推荐