dyld:未找到符号:_JNI_CreateJavaVM

问题描述 投票:11回答:4

这个错误是什么意思?

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

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

dyld:惰性符号绑定失败:未找到符号:_JNI_CreateJavaVM引自:/projects / main-project / node_modules / java / build / Release / nodejavabridge_bindings.node预期:flat namespace

dyld:未找到符号:_JNI_CreateJavaVM引自:/projects / main-project / node_modules / java / build / Release / nodejavabridge_bindings.node预期:flat namespace

我发现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什么都不做:

用户:~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运行时环境(版本9.0.1 + 11)Java HotSpot(TM)64位服务器VM(版本9.0.1 + 11,混合模式)

  1. 尝试不同版本的节点(7.10.0)
  2. 完全卸载node / npm,然后重新安装
java node.js macos
4个回答
0
投票

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

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

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

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

rm -rf node_modules/
npm install

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


  1. 从接受的答案here

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中找到的


0
投票

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

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


-1
投票

我终于想通了!

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

npm install winreg解决了所有问题

© www.soinside.com 2019 - 2024. All rights reserved.