c++ - EXE 不能与 CMake 中的 DLL 一起正常工作
问题描述
我已经阅读了许多关于类似问题的帖子,但我仍然找不到以下问题的解决方案。
我有两个 CLion (OS Windows) 项目mylib和myexe,它们位于同一级别的不同目录中。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。
解决方案
正如@Scheff 建议的那样,查看如何将 CMake 输出转换为“bin”目录?,我刚刚将这三行添加到myexe和mylib项目的 CMakeLists.txt 文件中:
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "../../bin")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "../../bin")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "../../bin")
其中“../../bin”是存储 .dll 和 .exe 的所需目录。
推荐阅读
- tensorflow - 在 Keras 中,是否可以对输入数据进行聚类,然后根据集群将数据提供给不同的子网?
- vb.net - 在客户端打印 RDLC
- python - 如何在函数中引用列表?
- node.js - 如何在 package.json 中为包提供自定义 url
- youtube - YouTube 数据 API 为没有频道的用户返回频道
- bash - 在 Jenkinsfile 中,如何访问在 sh 步骤中声明的变量?
- python - 如何解决 Python TypeError:“只能将整数标量数组转换为标量索引”
- typescript - 在 vue + typescript 应用程序中使用 okta 对用户进行身份验证 - 成功登录但用户从未经过身份验证
- html - 当我设置根页面时,我的菜单按钮隐藏在 ionic 3 中
- javascript - 如何使用javascript实现ios safari浏览器的打开相机和放大/缩小功能