我想使用CMakeLists构建一个jni应用程序。 我将我的java文件导出为Test.h并在main.cpp文件中实现了本机方法。现在我想使用CMakeLists作为dll导出cpp项目及其所有依赖项(如jni),并将其导入我的java项目中。 当我构建应用程序(在clion中)时,构建运行没有错误并且创建了文件。但是,我似乎无法将cpp项目导出为dll:在所有创建的文件(许多.make和.cmake文件)和目录中没有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 :(得分:0)
最后一行不是垃圾。在通用路径C:\ users .... Clion12 \ system \ cmake \ generated \ randomnumber \ randomnumber \ Release ...下正确设置构建/运行/调试配置时创建mylib.dll文件。
但是,由于java应用程序抛出UnsatisfiedLinkError
,因此.dll在这种情况下没用。我终于能够通过简单地使用以下命令(我改编自here:
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>
它生成一个简单的.dll文件,可以导入到java项目中并使用System.loadLibrary("<library>");
进行导入
可以找到示例项目here。