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

如何通过CMake链接自定义库?执行时DLL缺失问题求助

运行Hello.exe提示找不到libmy_library.dll的解决办法

问题根源

你编译的是动态共享库(SHARED),Windows下运行EXE时,依赖的DLL必须和EXE在同一目录,或者在系统能识别的PATH路径里。用MinGW编译时,libmy_library.dll默认生成在build/my_library文件夹里,而Hello.exe在build根目录,系统找不到这个DLL,所以报错。

三种解决办法

办法1:让CMake自动把DLL复制到EXE目录

直接修改根目录的CMakeLists.txt,在target_link_libraries这一行后面加一段代码:

# 编译完成后自动复制DLL到EXE所在目录
add_custom_command(TARGET ${PROJECT_NAME} POST_BUILD
    COMMAND ${CMAKE_COMMAND} -E copy_if_different
        $<TARGET_FILE:my_library>
        $<TARGET_FILE_DIR:${PROJECT_NAME}>
)

这段代码会在Hello.exe编译好之后,自动把my_library生成的DLL复制到EXE的输出目录,运行时就能直接找到。

办法2:改成静态库(不用依赖DLL)

如果不需要动态库,把my_library文件夹里的CMakeLists.txt里的SHARED改成STATIC:

add_library(my_library STATIC ${SOURCES})

静态库会把代码直接打包进EXE,运行时不需要额外的DLL文件,一步到位。

办法3:临时把DLL路径加到系统PATH

打开cmd,输入下面的命令(把路径换成你实际的build目录):

set PATH=%PATH%;你的项目路径\build\my_library

不过这个方法每次打开新的cmd都要重新执行,适合临时测试用,不推荐长期使用。

验证步骤

修改完CMake配置后,重新执行构建命令:

mkdir build && cd build
cmake .. -G "MinGW Makefiles"
mingw32-make

再运行Hello.exe就不会报错了。

内容的提问来源于stack exchange,提问作者Jairo Qlmbqn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 03:35:44