DLL Made with CMake 使程序崩溃

DLL Made with CMake makes the program crash

本文关键字:程序 崩溃 CMake Made with DLL      更新时间:2023-10-16

我正在努力使用使用CMAKE和C++生成的DLL。我能够构建库,包含它并构建目标项目,问题是当我运行目标构建时它会立即崩溃。 我的代码超级简单,我不知道我错过了什么。 DLL 是在单独的项目中使用 CMAKE 生成的。这是代码

DLL 项目:

CMakeList

cmake_minimum_required(VERSION 3.5)
project(LibProj LANGUAGES CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_definitions("-DBUILD_LIB")
file(GLOB
INCLUDE_FILES
baselibraryclass.h
)
file(GLOB
SOURCE_FILES
baselibraryclass.cpp
)
add_library(yourlib SHARED ${INCLUDE_FILES} ${SOURCE_FILES} )

baselibraryclass.h

#ifndef BASELIBRARYCLASS_H
#define BASELIBRARYCLASS_H
#ifdef BUILD_LIB
#define EXT_DLL __declspec(dllexport)
#else
#define  EXT_DLL __declspec(dllimport)
#endif
#include <string>
class EXT_DLL BaseLibraryClass
{
public:
BaseLibraryClass();
};
#endif // BASELIBRARYCLASS_H

基库类.cpp

#include "baselibraryclass.h"
#include <iostream>
EXT_DLL BaseLibraryClass::BaseLibraryClass()
{
std::cout << "Hi from the library Class Object " << std::endl;
}

目标项目

CMakeList

cmake_minimum_required(VERSION 3.5)
project(TargetProject LANGUAGES CXX)
#Including the path of the library header
include_directories(D:/TestingDLLNativeCpp/Library/include)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_executable(TargetProject main.cpp)
#The path of the built library is D:/TestingDLLNativeCpp/Library/Debug/yourlib.lib
target_link_libraries(TargetProject PRIVATE D:/TestingDLLNativeCpp/Library/Debug/yourlib.lib)  

目标项目主要.cpp

#include <iostream>
#include <baselibraryclass.h>
using namespace std;
int main()
{
BaseLibraryClass testObk;
return 0;
}

正如我上面写的,cmake 配置正确,编译器能够为这两个项目构建,但是目标可执行文件会立即崩溃。 我做错了什么哦??

感谢您的关注

dll 未包含在构建目录中的问题可以通过设置CMAKE_RUNTIME_OUTPUT_DIRECTORY来解决。但是,更好的做法是在目标基础上设置.dll的输出目录。从长远来看,这将确保您没有不必要的副作用。

set_target_property(yourlib PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")