我寫了一個綁定的C++類,它從C++調用java。我正在嘗試使用CMake來編譯綁定類(因爲將使用綁定類的工具使用CMake)。CMake JNI錯誤
不過,我收到以下錯誤:
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腳本。
這很有用,但沒有找到$ JAVA_HOME/include文件夾:include_directories($ {JAVA_INCLUDE_PATH} $ {_ classDir} $ {_ stubDir} $ ENV {JAVA_HOME}/include/linux $ ENV {JAVA_HOME} /包括/) – easytiger
對於Linux,您可能需要使用'$ {JAVA_INCLUDE_PATH} $ {JAVA_INCLUDE_PATH2}'。第二個包含路徑是jni_md.h,它包含在Linux中的jni.h中 –
變量'JNI_INCLUDE_DIRS'包含用於JNI編譯的所有必需目錄。我已經更新了答案。 – sakra