JNI 解惑
2020-08-15 本文已影响0人
你可记得叫安可
1. Q: 在 Visual Code 中出现错误 无法打开 源 文件 "jni.h"
如何解决?
A: 这个错误是因为 Visual Code 的插件 IntelliSense 设置的 include 路径没有找到 jni.h
。需要将 jvm 对外的路径加入到 C++ 的搜索路径:
-
which java
找到 java 的安装路径:/usr/bin/java
-
ll /usr/bin/java
:得到lrwxr-xr-x 1 root wheel 74B 6 13 17:24 /usr/bin/java -> /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/java
可以看到这个java
是一个连接,真正的路径是后面的 -
cd /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands
: 该目录下有一个命令是java_home
,表示当前使用的java
的 home 路径。 -
./java_home
:得到:/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home
(根据你当前使用的 Java 版本的不同,./java_home
会指向不同的地址) - 该路径下有个 include 目录,里面就有
jni.h
。因此这个目录就是IntelliSense
需要搜索的路径(在 VS Code 的 C/C++ 插件的设置中找到 includePath 选项,将搜索路径添加进去。添加时可以选择环境变量为路径前缀,这样可以避免绝对路径)。 - 然后
jni.h
又包含了jni_md.h
,而这个文件在 MacOS 下的目录是/Library/Java/JavaVirtualMachines/jdk1.8.0_121.jdk/Contents/Home/include/darwin
,因此需要将这两个目录都加入到 include 搜索中。 - 编译时如果使用命令行编译,则需要 -I"$JAVA_HOME/include"
我的 C/C++ 插件中的 Include Path 配置如下:
image.png
https://www3.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html