使用CMake构建Windows DllMain DLL
我有一个类似的问题。我正在尝试为windows编译一个类似于VisualStudio的DLL,除了CLion和CMake。我已经尝试了问题中的答案,以及所示的步骤,但在注射过程中仍然出现错误 我的dll代码非常简单,在visual studio中编译的类似dll工作正常:使用CMake构建Windows DllMain DLL,cmake,clion,Cmake,Clion,我有一个类似的问题。我正在尝试为windows编译一个类似于VisualStudio的DLL,除了CLion和CMake。我已经尝试了问题中的答案,以及所示的步骤,但在注射过程中仍然出现错误 我的dll代码非常简单,在visual studio中编译的类似dll工作正常: #include <windows.h> #include <iostream> using namespace std; void hello() { AllocConsole();
#include <windows.h>
#include <iostream>
using namespace std;
void hello() {
AllocConsole();
freopen("CONOUT$", "w", stdout);
cout << "Hello, World!" << endl;
}
bool __stdcall DllMain(HMODULE /*module*/, DWORD reason, LPVOID /*reserved*/) {
if (reason == DLL_PROCESS_ATTACH) hello();
return true;
}
您有两个选择:
BUILD\u SHARED\u LIBS
变量作为布尔值添加到CMake的缓存中,然后检查它。这将修改add_library
命令的行为,以在Windows上创建共享库,即DLL文件add\u库(PROJECT\u NAMEMODULE shared main.cpp)
BUILD\u SHARED\u LIBS
variable documentation:尝试将SHARED添加到add\u library调用中,即add\u library(PROJECT\u NAMEMODULE SHARED main.cpp)
,因为否则会创建静态库。
cmake_minimum_required(VERSION 3.9)
project(PROJECT_NAME)
include (GenerateExportHeader)
set(CMAKE_CXX_STANDARD 17)
add_library(PROJECT_NAME MODULE main.cpp)
set_target_properties(PROJECT_NAME PROPERTIES COMPILE_FLAGS "-m32" LINK_FLAGS "-m32")
GENERATE_EXPORT_HEADER(PROJECT_NAME
BASE_NAME PROJECT_NAME
EXPORT_MACRO_NAME PROJECT_NAME_EXPORT
EXPORT_FILE_NAME PROJECT_NAME_Export.h
STATIC_DEFINE PROJECT_NAME_BUILT_AS_STATIC)