Test di autoconf per JNI include dir
-
03-07-2019 - |
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?
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.