JNI的Autoconf测试包含目录
时间:2020-03-06 15:02:28 来源:igfitidea点击:
我正在为JNI包装器配置脚本。配置参数之一是jni.h
的路径。关于此参数是否为C ++编译正确设置的一项很好的快速而又肮脏的Autoconf测试?我们可以假设我们正在Linux上运行,并且可以使用g ++
。
另外,有没有办法让" javah"(或者支持工具)直接给我这个路径?
解决方案
检查标题很容易;只需使用" AC_CHECK_HEADER"即可。如果它位于一个奇怪的地方(即编译器不知道的地方),则完全有理由期望用户设置" CPPFLAGS"。
困难的部分实际上是定位libjvm
。我们通常不希望与此链接。但如果运行时未设置JAVA_HOME,则可能需要默认为dlopen的位置。
但是我没有比在配置时设置JAVA_HOME
更好的解决方案。这些内容在各种操作系统(甚至只是Linux发行版)中的部署方式差异太大。这就是我要做的:
AC_CHECK_HEADER([jni.h], [have_jni=yes]) AC_ARG_VAR([JAVA_HOME], [Java Runtime Environment (JRE) location]) AC_ARG_ENABLE([java-feature], [AC_HELP_STRING([--disable-java-feature], [disable Java feature])]) case $target_cpu in x86_64) JVM_ARCH=amd64 ;; i?86) JVM_ARCH=i386 ;; *) JVM_ARCH=$target_cpu ;; esac AC_SUBST([JVM_ARCH]) AS_IF([test X$enable_java_feature != Xno], [AS_IF([test X$have_jni != Xyes], [AC_MSG_FAILURE([The Java Native Interface is required for Java feature.])]) AS_IF([test -z "$JAVA_HOME"], [AC_MSG_WARN([JAVA_HOME has not been set. JAVA_HOME must be set at run time to locate libjvm.])], [save_LDFLAGS=$LDFLAGS LDFLAGS="-L$JAVA_HOME/lib/$JVM_ARCH/client -L$JAVA_HOME/lib/$JVM_ARCH/server $LDFLAGS" AC_CHECK_LIB([jvm], [JNI_CreateJavaVM], [LIBS=$LIBS], [AC_MSG_WARN([no libjvm found at JAVA_HOME])]) LDFLAGS=$save_LDFLAGS ])])