使用 CMakeList 创建一个 c++ 项目的 dll
Create a dll of a c++ project with CMakeList
我想使用 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 )
我猜最后一行是垃圾,应该用更准确的陈述代替。我错过了什么?
最后一行不是废话。 mylib.dll 文件在通用路径 C:\users....Clion12\system\cmake\generated\randomnumber\randomnumber\Release... 下创建 build/run/debug 配置正确时。
但是,.dll 在这种情况下没有用,因为 java 应用程序抛出 UnsatisfiedLinkError
。我终于能够通过简单地使用以下命令(我改编自 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.
我想使用 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 )
我猜最后一行是垃圾,应该用更准确的陈述代替。我错过了什么?
最后一行不是废话。 mylib.dll 文件在通用路径 C:\users....Clion12\system\cmake\generated\randomnumber\randomnumber\Release... 下创建 build/run/debug 配置正确时。
但是,.dll 在这种情况下没有用,因为 java 应用程序抛出 UnsatisfiedLinkError
。我终于能够通过简单地使用以下命令(我改编自 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.