JNI에 대한 Autoconf 테스트에는 DIR이 포함됩니다
-
03-07-2019 - |
문제
JNI 래퍼를위한 구성 스크립트를 작업 중입니다. 구성 매개 변수 중 하나는 경로입니다 jni.h
. 이 매개 변수가 C ++ 컴파일을 위해 올바르게 설정되어 있는지 여부에 대한 좋은 빠른 AutoConf 테스트는 무엇입니까? Linux에서 실행 중이라고 가정 할 수 있습니다 g++
사용할 수 있습니다.
또는 얻을 수있는 방법이 있습니까? javah
(또는 지원 도구)이 길을 직접 제공 하는가?
해결책
헤더 확인은 쉽습니다. 그냥 사용하십시오 AC_CHECK_HEADER
. 이상한 장소에 있다면 (예 : 컴파일러가 알지 못하는 것), 사용자가 설정할 것으로 기대하는 것은 전적으로 합리적입니다. CPPFLAGS
.
어려운 부분은 실제로 찾는 것입니다 libjvm
. 당신은 일반적으로 이것과 연결하고 싶지 않습니다. 그러나 당신은 장소로 기본값을 원할 수도 있습니다. dlopen
IF에서 JAVA_HOME
실행 시간에 설정되지 않았습니다.
그러나 나는 그것을 요구하는 것보다 더 나은 솔루션이 없습니다. JAVA_HOME
구성 시간으로 설정하십시오. 이 물건이 다양한 OS (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
])])
다른 팁
그런 다음 쉬운 방법이 있습니다. http://www.gnu.org/software/autoconf-archive/ax_jni_include_dir.html
때로는 표준 레시피를 사용하는 것이 가장 좋습니다.
제휴하지 않습니다 StackOverflow