我正在尝试从源代码构建VirtualBox-6.1.6。在Ubuntu 20.04上(请不要谈论预编译,我正在寻找此问题的解决方案)。 我从kmk收到编译错误。
nsAppFileLocProviderProxy.h:42:10: fatal error: jni.h: No such file or directory
42 | #include "jni.h"
但是我有多于一本。
locate jni.h
/usr/include/x86_64-linux-gnu/libavcodec/jni.h
/usr/lib/jvm/java-11-openjdk-amd64/include/jni.h
/usr/lib/jvm/java-8-openjdk-amd64/include/jni.h
使用openjdk与sun /一个是否有问题?我需要在AutoConfig.kmk中更改某些行吗?
答案 0 :(得分:2)
虚拟盒子build script searches for Java on Linux like this:
ifeq ($(KBUILD_TARGET),linux)
ifeq ($(origin VBOX_JAVA_HOME),undefined)
# Add correct detection for you distro after the /usr/../java-6-sun line.
VBOX_JAVA_HOME := $(firstword $(wildcard \
$(KBUILD_DEVTOOLS)/linux.x86/jdk1.6.0_27 \
/usr/lib/jvm/java-6-sun \
/usr/lib/jvm/java-6-openjdk \
/usr/lib/jvm/java-6-openjdk-i386 \
/usr/lib/jvm/java-6-openjdk-amd64 \
/usr/lib/jvm/java-7-openjdk-i386 \
/usr/lib/jvm/java-7-openjdk-amd64 \
/usr/lib/jvm/default-java \
/usr/lib/jvm/java \
\
/usr/lib/jvm/sun-jdk-1.6 \
) /usr/lib/jvm/java-6-sun)
endif
endif
您的路径(/usr/lib/jvm/java-11-openjdk-amd64/
和/usr/lib/jvm/java-8-openjdk-amd64/
)没有出现在该列表中。因此,它不会在其中寻找jni.h
。
我立即想到的是在其中添加您的OpenJDK 8路径:
/usr/lib/jvm/java-7-openjdk-i386 \
/usr/lib/jvm/java-7-openjdk-amd64 \
/usr/lib/jvm/java-8-openjdk-amd64 \ <<<< ADD This
/usr/lib/jvm/default-java \
然后尝试重新构建。如果可行,甚至可以向Virtual Box维护者发送修复程序?
答案 1 :(得分:0)
啊..我设法解决它,我发现了其他依赖项的旧清单,并添加了一堆java-common,因为某种原因我的cmdline没有保存该cmd,所以我无法重现它。但是我仍然只有jni.h在我提到的位置...但是,我随后不得不重新运行
./configure
然后是env.sh
脚本,它似乎可以解决。并遵守了。