当前位置:  开发笔记 > 编程语言 > 正文

JNI的Autoconf测试包括dir

如何解决《JNI的Autoconf测试包括dir》经验,为你挑选了2个好方法。

我正在为JNI包装器编写配置脚本.其中一个配置参数是路径jni.h.对于是否为C++编译正确设置了此参数,有什么好的快速和脏的Autoconf测试?您可以假设您在Linux上运行并且g++可用.

或者,有没有办法让javah(或支持工具)直接给我这条路径?



1> Christopher ..:

然后有简单的方法:http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html

有时最好只使用标准的收件人.


如果您查看问题上的日期和该文件的版权日期,您会看到在接受上述答案时没有"标准配方".

2> Braden..:

检查标题很容易; 只是用AC_CHECK_HEADER.如果它处于一个奇怪的地方(即编译器不知道的那个),那么期望用户设置是完全合理的CPPFLAGS.

困难的部分实际上是定位libjvm.您通常不希望与此链接; 但是dlopen如果JAVA_HOME未在运行时设置,则可能需要默认为它的位置.

但我没有比要求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
])])

推荐阅读
coco2冰冰
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有