使用CMakeList创建一个c++项目的dll

Create a dll of a c++ project with CMakeList

本文关键字:c++ 一个 项目 dll CMakeList 创建 使用      更新时间:2023-10-16

我想使用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\randomnumer\Release。。。当正确设置了构建/运行/调试配置时。

但是,由于java应用程序抛出UnsatisfiedLinkError,因此.dll在这种情况下没有用处。我终于能够通过简单地使用以下命令(我从这里改编而来:

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

它生成一个简单的.dll文件,该文件可以导入到java项目中,并使用System.loadLibrary("<library>");导入
可以在这里找到一个示例项目。