Autoconf Test für JNI gehören dir
-
03-07-2019 - |
Frage
Ich arbeite an einem Konfigurationsskript für einen JNI-Wrapper. Eine der Konfigurationsparameter ist der Pfad zu jni.h
. Was ist ein guter quick-and-dirty Autoconf Test, ob diese Parameter korrekt für C ++ Erstellung gesetzt? Sie können annehmen, dass Sie auf Linux laufen und g++
verfügbar ist.
Alternativ ist es eine Möglichkeit, javah
(oder ein unterstützendes Werkzeug), um mir diesen Weg zu geben, direkt?
Lösung
für Header prüfen ist einfach; nur verwenden AC_CHECK_HEADER
. Wenn es in einem seltsamen Ort ist (das heißt, eine der Compiler nicht kennen), ist es durchaus vernünftig Benutzer zu erwarten CPPFLAGS
zu setzen.
Der schwierige Teil ist die Lokalisierung tatsächlich libjvm
. Sie wollen der Regel nicht mit diesem verbinden; Sie können jedoch an einem Speicherort auf Standard möchte es dlopen
aus, wenn JAVA_HOME
wird zur Laufzeit nicht festgelegt.
Aber ich habe nicht eine bessere Lösung als zu verlangen, dass JAVA_HOME
bei configure Zeit eingestellt wird. Es gibt einfach zu viel Variation in wie dieses Zeug über verschiedene Betriebssysteme bereitgestellt wird (auch nur Linux-Distributionen). Das ist, was ich tue:
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
])])
Andere Tipps
Dann gibt es die einfache Möglichkeit: http://www.gnu.org /software/autoconf-archive/ax_jni_include_dir.html
Manchmal ist es am besten, nur die Standard-recipies zu verwenden.