Тест Autoconf для JNI включает каталог - PullRequest
5 голосов
/ 02 октября 2008

Я работаю над сценарием конфигурации для оболочки JNI. Одним из параметров конфигурации является путь к jni.h. Что такое хороший быстрый и грязный тест Autoconf для того, правильно ли установлен этот параметр для компиляции C ++? Можно предположить, что вы работаете в Linux, и g++ доступно.

В качестве альтернативы, есть ли способ получить javah (или вспомогательный инструмент), чтобы дать мне этот путь напрямую?

Ответы [ 2 ]

6 голосов
/ 27 июня 2013

Тогда есть простой способ: http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html

Иногда лучше всего использовать стандартные получатели.

5 голосов
/ 02 октября 2008

Проверка заголовков проста; просто используйте AC_CHECK_HEADER. Если он находится в странном месте (то есть, о котором не знает компилятор), вполне разумно ожидать, что пользователи установят CPPFLAGS.

Трудная часть на самом деле находится libjvm. Вы обычно не хотите связываться с этим; но вы можете установить значение по умолчанию для dlopen, если JAVA_HOME не установлено во время выполнения.

Но у меня нет лучшего решения, чем требование установки JAVA_HOME во время настройки. Слишком много различий в том, как этот материал используется в разных ОС (даже в дистрибутивах Linux). Вот что я делаю:

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