문제

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

때로는 표준 레시피를 사용하는 것이 가장 좋습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top