首页 > 解决方案 > EXE 不能与 CMake 中的 DLL 一起正常工作

问题描述

我已经阅读了许多关于类似问题的帖子,但我仍然找不到以下问题的解决方案。

我有两个 CLion (OS Windows) 项目mylibmyexe,它们位于同一级别的不同目录中。mylib 由两个文件组成: library.h

void hello();

和 library.cpp

#include "library.h"
#include <iostream>

void hello() {
    std::cout << "Hello, World!" << std::endl;
}

mylib的 CMakeLists.txt如下:

cmake_minimum_required(VERSION 3.16)
project(mylib)

set(CMAKE_CXX_STANDARD 14)

add_library(mylib SHARED library.cpp library.h)

接下来,项目myexe包含一个文件 main.cpp

#include "../mylib/library.h"

int main() {
    hello();
    return 0;
}

使用以下 CMakeLists.txt 文件

cmake_minimum_required(VERSION 3.16)
project(myexe)

set(CMAKE_CXX_STANDARD 14)

add_executable(myexe main.cpp)

find_library(RESULT mylib "d:/src/test/mylib/cmake-build-debug")
target_link_libraries(myexe "${RESULT}")

这两个项目都没有错误地构建。但是当我运行myexe时,没有打印“Hello, world”,我得到以下信息:

Process finished with exit code -1073741515 (0xC0000135)

请帮助我,如何解决这个问题并正确链接DLL。

标签: c++dllcmakeclion

解决方案


正如@Scheff 建议的那样,查看如何将 CMake 输出转换为“bin”目录?,我刚刚将这三行添加到myexemylib项目的 CMakeLists.txt 文件中:

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "../../bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "../../bin")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../../bin")

其中“../../bin”是存储 .dll 和 .exe 的所需目录。


推荐阅读