2016-05-02 8 views
0

CMakeListを使ってjniアプリケーションを構築したいと思います。 javaファイルをTest.hとしてエクスポートし、main.cppファイルにネイティブメソッドを実装しました。今、私はcppプロジェクトとそのすべての依存関係(jniのような)をCMakeListsをdllとして使用してエクスポートし、それを私のJavaプロジェクトにインポートしたいと思います。 アプリケーションをビルドすると、ビルドはエラーなく実行され、ファイルが作成されます。しかし、私はcppプロジェクトをdllとしてエクスポートすることはできません。作成されたすべてのファイル(.makeと.cmakeファイル)とディレクトリの中にdllファイルはありません。CMakeListでC++プロジェクトのDLLを作成する

これは私のCMakeListsファイルです:私は最後の行はゴミであり、より正確な文で置き換えられる必要がありますね

cmake_minimum_required(VERSION 3.3) 
project(Uebung_2_cpp) 
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") 

find_package(JNI REQUIRED) 
include_directories(${JNI_INCLUDE_DIRS}) 

if (JNI_FOUND) 
    message(STATUS "JAVA_INCLUDE_PATH2=${JAVA_INCLUDE_PATH2}") 
else() 
    message(FATAL_ERROR "I really need JNI.") 
endif() 

set(SOURCE_FILES 
     main.cpp 
     Test.h) 

add_executable(Uebung_2_cpp ${SOURCE_FILES}) 

add_library(mylib.dll SHARED main.cpp Test.h) 

。私は何が欠けていますか?

答えて

0

最後の行はごみではありません。ビルド/実行/デバッグ構成が正しく設定されている場合、mylib.dllファイルはC:¥users .... Clion12¥system¥cmake¥generated¥randomnumber¥randomnumber¥Releaseという汎用パスの下に作成されます。

ただし、javaアプリケーションがUnsatisfiedLinkErrorをスローするため、.dllはこの場合役に立ちません。これは、Javaプロジェクトにインポートすることができ、System.loadLibrary("<library>");を使用してインポートすることが簡単な.dllファイルを生成します

g++ -Wl,--add-stdcall-alias -I "<JAVA_32_BIT_HOME>\include" -I"<JAVA_32_BIT_HOME>\include\win32" -shared -o <DESIRED_.dll_FILE_PATH> <IMPLEMENTATION_FILE>

:私は最終的に、単に私がhereから適応、次のコマンドを(使用して問題を解決することができました
サンプルプロジェクトはhereです。

関連する問題