Domanda

Sto lavorando a uno script di configurazione per un wrapper JNI. Uno dei parametri di configurazione è il percorso di jni.h . Che cos'è un buon test Autoconf rapido e sporco per verificare se questo parametro è impostato correttamente per la compilazione C ++? Puoi supporre di essere in esecuzione su Linux e g ++ è disponibile.

In alternativa, c'è un modo per ottenere javah (o uno strumento di supporto) per darmi direttamente questo percorso?

È stato utile?

Soluzione

Il controllo delle intestazioni è semplice; usa AC_CHECK_HEADER . Se si trova in un posto strano (ad esempio, uno che il compilatore non conosce), è del tutto ragionevole aspettarsi che gli utenti impostino CPPFLAGS .

La parte difficile sta effettivamente localizzando libjvm . Di solito non vuoi collegarti a questo; ma potresti voler impostare automaticamente una posizione su dlopen se JAVA_HOME non è impostato in fase di esecuzione.

Ma non ho una soluzione migliore che richiedere che JAVA_HOME sia impostato al momento della configurazione. Esistono troppe variazioni nel modo in cui questo materiale viene distribuito su vari sistemi operativi (anche solo distribuzioni Linux). Questo è quello che faccio:

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

Altri suggerimenti

Quindi c'è un modo semplice: http://www.gnu.org /software/autoconf-archive/ax_jni_include_dir.html

A volte è meglio usare solo le ricette standard.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top