ネイティブライブラリ(JNI)に依存するFiji/ImageJ用のプラグインを開発しようとしています。 JNIライブラリ自体はlibtiff
とfftw
に依存します。 OSXとLinuxでは、私はクラスNativeUtilsを使用し、すべて正常に動作します。 Windows上でjarファイル内でJNIライブラリをカプセル化する
、私はCMake
パッケージでlibtiff
とfftw
のバイナリバージョンを含めて(静的、動的の)それらに対してJNIライブラリをリンクするために管理。ただし、結果のJNIモジュールにlibtiff
またはfftw
が含まれていないため、NativeUtils.loadLibraryFromJar
でJNIライブラリをロードしようとするとエラーが発生します。これは、で抽出されていないため、従属.dll
を.jar
に含める場合も同様です。
add_library(fftw STATIC IMPORTED GLOBAL)
set_target_properties(fftw PROPERTIES IMPORTED_LOCATION "${libdir}/libfftw3f-3.lib"
INTERFACE_INCLUDE_DIRECTORIES "${incdir}")
SWIG_ADD_LIBRARY(javainterf
TYPE MODULE
LANGUAGE java
SOURCES javainterf.i javainterf.c src1.c)
SWIG_LINK_LIBRARIES(javainterf libcode1 fftw)
add_jar(Foo
SOURCES ${CMAKE_CURRENT_BINARY_DIR}/java/foo1.java
INCLUDE_JARS java/resources/ij-1.51p.jar
VERSION ${JAR_VERSION})
add_dependencies(Foo javainterf)
add_custom_command(TARGET Foo POST_BUILD
COMMAND "${Java_JAR_EXECUTABLE}" -uf Foo-${JAR_VERSION}.jar
-C ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR} ${JNI_LIB_NAME})
がどのようにすべての依存関係が適切にjarファイルに含まれてロードされていることを確認します:
ここCMakeLists.txt
内の関連する行がありますか?
完全な解決策ではありませんが、ImageJドキュメントの[ネイティブライブラリを使用した開発](https://imagej.net/Developing_using_native_libraries)ページをお読みになりましたか? JARファイルに埋め込む代わりに、あなたのネイティブライブラリを '$ IJ_ROOT/lib/'に置いてみましたか? –
ctrueden
私はそれについて考えましたが、エンドユーザーにとってインストールがより複雑になります。 @mkoによって提案された解決策が私のために働くならば、jarファイルの中のすべてを含めて行くつもりです。 – hpixel
インストールに関する懸念がありません。 [更新サイト](https://imagej.net/Update_Sites)を使用している場合は、必要なすべてのファイルをボタンをクリックしてユーザーに送ることができます。また、自動的に更新も受け取ります。 – ctrueden