代码之家  ›  专栏  ›  技术社区  ›  Charles Duffy

JNI include dir的autoconf测试

  •  5
  • Charles Duffy  · 技术社区  · 17 年前

    我正在为JNI包装器编写配置脚本。其中一个配置参数是 jni.h . 什么是一个好的快速和肮脏的自动CONCOF测试,这个参数是否为C++编译正确设置?你可以假设你在Linux上运行, g++ 是可用的。

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

    2 回复  |  直到 12 年前
        1
  •  5
  •   Braden    17 年前

    检查邮件头很容易;只需使用 AC_CHECK_HEADER . 如果它在一个奇怪的地方(即编译器不知道的地方),那么期望用户设置 CPPFLAGS .

    硬的部分实际上是定位 libjvm . 您通常不希望与此链接;但您可能希望默认为 dlopen 从IF 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
    ])])
    
        2
  •  6
  •   Christopher Smith    12 年前

    还有一个简单的方法: http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html

    有时最好只使用标准的食谱。

    推荐文章