dyld:未找到符号:_JNI_CreateJavaVM

时间:2017-12-21 15:06:20

标签: java node.js macos

这个错误是什么意思?

我需要做些什么来解决它?

我正在尝试在Mac OS El Captain上为node.js(特别是xslt4node)运行基于java的模块,但每次出现此错误。对于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   期望:平面命名空间

我发现Undefined symbols for architecture x86_64: JNI_CreateJavaVM OS-X Xcode是我能找到的最接近我解释我的确切问题的,但我没有使用xcode进行开发,我在node.js平台上。

之前有其他人见过吗?这是什么意思?

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

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

    用户:~kawnah $ sudo rm -fr   /Library/PreferencePanes/JavaControlPanel.prefPane用户:~kawnah $   sudo rm -fr~ / Library / Application \ Support / Java用户:~kawnah $   java -version java version“9.0.1”Java(TM)SE运行时环境   (build 9.0.1 + 11)Java HotSpot(TM)64位服务器VM(版本9.0.1 + 11,   混合模式)

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

4 个答案:

答案 0 :(得分:0)

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

Mac OS X's DYLD是操作系统的dynamic linker。它的工作或多或少是在请求资源时为操作系统加载共享库。

这可能会发生多种原因,从模块本身的更新过程失败到驱动器损坏等等。

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

rm -rf node_modules/
npm install

您也可以尝试进行npm重建,但干净安装通常是最佳选择。

  1. 来自已接受的答案here

答案 1 :(得分:0)

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

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

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

中找到

答案 2 :(得分:0)

尝试xcode-select --install,然后npm rebuild 检查this线程,问题似乎是苹果的xcode(在你的情况下它可能是c ++编译器),讨论是针对ruby vm但可能与jvm类似。

通常检查/更新您的c ++ / c编译器,然后尝试其他任何操作,例如选择其他Java版本并将JNI添加到功能中。最后提到node-gyp需要python版本2.x,如node-java的README中所述。

答案 3 :(得分:-1)

我终于搞清楚了!

我需要这个npm包让node-java在我的机器https://www.npmjs.com/package/winreg

上正常工作

npm install winreg解决了所有问题