JNI的Autoconf测试包括dir
-
03-07-2019 - |
题
我正在为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
])])
其他提示
然后有一个简单的方法: http://www.gnu.org /software/autoconf-archive/ax_jni_include_dir.html
有时最好只使用标准收件人。
不隶属于 StackOverflow