質問

私は、JNIラッパーの構成スクリプトに取り組んでいます。構成パラメーターの1つは、 jni.h へのパスです。このパラメータがC ++コンパイル用に正しく設定されているかどうかを確認するための、すぐに使えるAutoconfテストとは何ですか? Linuxで実行しており、 g ++ が利用可能であると想定できます。

別の方法として、 javah (またはサポートツール)を入手してこのパスを直接提供する方法はありますか?

役に立ちましたか?

解決

ヘッダーの確認は簡単です。 AC_CHECK_HEADER を使用してください。奇妙な場所(つまり、コンパイラが知らない場所)にある場合、ユーザーが CPPFLAGS を設定することを期待するのはまったく合理的です。

実際に難しいのは、 libjvm を見つけることです。通常、これとリンクすることは望ましくありません。ただし、実行時に JAVA_HOME が設定されていない場合は、デフォルトの場所に dlopen することができます。

しかし、構成時に 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