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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top