C++ から Java を呼び出すバインディング C++ クラスを作成しました。CMake を使用してバインディング クラスをコンパイルしようとしています (バインディング クラスを使用するツールが CMake を使用するため)。
ただし、次のエラーが表示されます。
CMakeFiles/JNIWrapper.dir/JNIWrapper.cpp.o: In function `createVM(JavaVM_**)':
JNIWrapper.cpp:(.text+0x52): undefined reference to `JNI_CreateJavaVM'
collect2: ld returned 1 exit status
make[2]: *** [JNIWrapper] Error 1
make[1]: *** [CMakeFiles/JNIWrapper.dir/all] Error 2
make: *** [all] Error 2
ここに私のCMakeLists.txtがあります:
cmake_minimum_required(VERSION 2.8.6)
project(AProject)
FIND_PACKAGE(JNI REQUIRED)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -I/usr/lib/jvm/java-6-openjdk-amd64/include -I/usr/lib/jvm/java-6-openjdk-amd64/include/linux -L/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/amd64/server")
SET(CMAKE_EXE_LINKER_FLAGS "-ljvm")
# add the binary tree directory to the search path for include files
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
include_directories(${JNI_INCLUDE_DIRS})
# add the executable
add_executable (JNIWrapper JNIWrapper.cpp)
どんな提案でも大歓迎です。
PS: 従来の方法と makefile を使用してコンパイルしようとしました。私はその例に従い、上記の CMakeLists.txt スクリプトを書きました。