使用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\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>");
导入
可以在这里找到一个示例项目。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 函数向量_指针有不同的原型,我可以构建一个吗
- 在c++中用vector填充一个简单的动态数组
- 如何在选项卡视图Qt中设置一个新项目,并保存以前的项目
- 预处理器:插入结构名称中的前一个行号
- 我在c++代码中生成了一个运行时#3异常
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- 从链接列表c++中删除一个项目
- 告诉一个 const char 数组,除了编译时 C 样式的字符串外,它不以 '