Pergunta

Eu estou trabalhando em um script de configuração para um wrapper JNI. Um dos parâmetros de configuração é o caminho para jni.h. O que é um bom rápida e suja teste Autoconf para saber se este parâmetro é definido corretamente para compilação C ++? Você pode supor que você está rodando em Linux e g++ está disponível.

Como alternativa, há uma maneira de obter javah (ou uma ferramenta de apoio) para me dar este caminho diretamente?

Foi útil?

Solução

Verificação de cabeçalhos é fácil; basta usar AC_CHECK_HEADER. Se está em um lugar estranho (ou seja, um compilador não sabe sobre), é perfeitamente razoável esperar que os usuários conjunto CPPFLAGS.

A parte difícil é realmente localizar libjvm. Você normalmente não quer ligação com este; mas você pode querer para o padrão para um local para dlopen-lo de se JAVA_HOME não está definido em tempo de execução.

Mas eu não tenho uma solução melhor do que exigir que JAVA_HOME ser definida em tempo de configuração. Há apenas muita variação na forma como este material é implantado em vários sistemas operacionais (mesmo apenas distribuições Linux). Isto é o que eu faço:

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
])])

Outras dicas

Depois, há o caminho mais fácil: http://www.gnu.org /software/autoconf-archive/ax_jni_include_dir.html

Às vezes é melhor usar apenas o recipies padrão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top