【问题标题】:EXE doesn't work correctly with DLL in CMake [duplicate]EXE 不能与 CMake 中的 DLL 一起正常工作 [重复]
【发布时间】:2021-04-08 06:09:10
【问题描述】:

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

我有两个 CLion (OS Windows) 项目 mylibmyexe 位于同一级别的不同目录中。 mylib 包含两个文件: 图书馆.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。

【问题讨论】:

  • 这个错误意味着你myexe.exe 试图在启动时加载mylib.dll。因此,它已正确链接。请检查myexe.exemylib.dll是否建在同一目录下(或之后将mylib.dll复制到myexe.exe的文件夹中)。顺便提一句。在CMake 中,您可以强制将所有二进制文件构建到同一输出目录中,以防止将来出现此类问题。
  • 仅供参考:microsoft.com: 2.3.1 NTSTATUS Values(请在此站点上进行文本搜索 135。我在 HTML 代码中找不到任何可以直接链接到它的内容。)

标签: c++ dll cmake clion


【解决方案1】:

正如@Scheff 建议的那样,查看How do I make CMake output into a 'bin' dir?,我刚刚将这三行添加到两个项目myexemylib 的CMakeLists.txt 文件中:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-10
    • 2014-07-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多