Question

Je travaille sur un script de configuration pour un wrapper JNI. L'un des paramètres de configuration est le chemin d'accès à jni.h . Qu'est-ce qu'un bon test Autoconf rapide qui vérifie si ce paramètre est défini correctement pour la compilation C ++? Vous pouvez supposer que vous utilisez Linux et que g ++ est disponible.

Sinon, y a-t-il un moyen d'obtenir que javah (ou un outil auxiliaire) me donne directement ce chemin?

Était-ce utile?

La solution

Il est facile de rechercher des en-têtes. utilisez simplement AC_CHECK_HEADER . Si c'est dans un endroit étrange (c'est-à-dire que le compilateur ignore), il est tout à fait raisonnable de s'attendre à ce que les utilisateurs définissent CPPFLAGS .

La partie la plus difficile consiste à localiser libjvm . Vous ne voulez généralement pas créer de lien avec cela; mais vous voudrez peut-être utiliser un emplacement par défaut pour dlopen si JAVA_HOME n'est pas défini au moment de l'exécution.

Mais je n'ai pas de meilleure solution que d'exiger que JAVA_HOME soit défini lors de la configuration. Il y a juste trop de variations dans la manière dont ces éléments sont déployés sur différents systèmes d'exploitation (même les distributions Linux uniquement). Voici ce que je fais:

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

Autres conseils

Ensuite, il existe un moyen simple: http://www.gnu.org /software/autoconf-archive/ax_jni_include_dir.html

Parfois, il est préférable d'utiliser uniquement les recettes standard.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top