You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake未生成.dll文件反而创建.dir文件夹问题求助

Windows CLion + CMake 生成DLL完整解决方案

你当前生成的默认构建文件夹结构如下:
生成的文件夹示意
没有生成预期的DLL是因为CMake配置和参数选择错误,按照以下步骤操作即可得到可直接外部调用的QuadCopter.dll文件。

前置检查:确认工具链配置

  • 打开CLion设置→构建、执行、部署→工具链,确认使用的是MinGW(无需Visual Studio推荐选MinGW-w64,不要用Cygwin),路径配置正确,cmake、make、gcc/g++编译器都能正常识别
  • 不要使用STATIC参数,STATIC生成的是静态链接库.lib,只有SHARED参数才会生成动态库.dll

第一步:修改CMakeLists.txt配置

替换你原有的CMake内容为以下配置:

cmake_minimum_required(VERSION 3.20)
project(QuadCopter)

# 开启Windows下自动导出所有符号,无需手动加dllexport标记
set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS ON)
# 生成动态库必须用SHARED参数
add_library(QuadCopter SHARED main.h main.cpp)

# 可选:指定DLL输出路径,避免到深层build目录找
set_target_properties(QuadCopter PROPERTIES
        RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output
        LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output
        ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/output
)

上述配置中CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS为Windows平台特有参数,开启后会自动把所有函数和全局变量导出到DLL,无需手动给每个函数加__declspec(dllexport)标记,降低新手配置成本。输出路径配置可以让你直接在项目根目录的output文件夹找到生成的DLL,不用到build目录下翻找。

第二步:验证导出函数正确性

如果需要外部调用DLL里的函数,确保需要导出的函数已经在头文件中明确声明,示例如下:

// main.h示例代码
#ifndef QUADCOPTER_MAIN_H
#define QUADCOPTER_MAIN_H

// 你需要导出的函数声明
void init_quadcopter();
int get_sensor_data();

#endif //QUADCOPTER_MAIN_H

main.cpp中正常实现对应的函数即可,不需要加额外标记。

第三步:重新构建项目

  • 点击CLion顶部的文件→重新加载CMake项目
  • 点击构建按钮(或按Ctrl+F9)执行构建
  • 到你配置的output目录(如果未配置输出路径就到build目录下的对应生成文件夹)就能找到QuadCopter.dll文件,同时会生成配套的.lib导入库,外部调用DLL的时候需要用到这个.lib做链接。

常见问题排查

  • 如果还是没生成DLL:检查CMakeLists.txt里是否确实使用了SHARED而不是STATIC,确认工具链没有配置成Visual Studio的MSVC(使用MSVC需要额外安装独立构建工具,无VS环境下还是推荐MinGW)
  • 外部调用DLL找不到函数:确认你要调用的函数已经在头文件里声明,已开启CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS参数,或手动给函数加了__declspec(dllexport)标记。

内容的提问来源于stack exchange,提问作者Joshua Unrau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 04:48:01