用CMake制作的DLL导致程序崩溃

问题描述 投票:1回答:1

我正在努力使用通过CMAKE和C ++生成的DLL。我能够构建该库,包括它并构建目标项目,问题是当我运行目标构建时,它立即崩溃。我的代码非常简单,我不知道自己缺少什么。DLL是在单独的项目中使用CMAKE构建的。这是代码

DLL项目:

CMakeLists

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

baselibraryclass.cpp

#include "baselibraryclass.h"

#include <iostream>

EXT_DLL BaseLibraryClass::BaseLibraryClass()
{
    std::cout << "Hi from the library Class Object " << std::endl;
}

目标项目

CMakeLists

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)  

目标项目main.cpp

#include <iostream>
#include <baselibraryclass.h>
using namespace std;

int main()
{
    BaseLibraryClass testObk;
    return 0;
}

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

感谢关注

c++ dll cmake shared-libraries libraries
1个回答
0
投票

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

set_target_property(yourlib PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}")
© www.soinside.com 2019 - 2024. All rights reserved.