如何用CMake处理DLL库?运行时提示找不到oysters.dll
解决运行时找不到oysters.dll的问题
实用解决办法:
- 自动复制DLL到exe输出目录:直接把DLL和exe放在同一目录是最稳妥的方式,还可以用CMake自动完成这个操作,避免手动复制。在你的CMake配置里添加这段代码:
这段代码会在编译完exe后,自动把lib目录下的oysters.dll复制到exe所在的输出文件夹(比如add_custom_command(TARGET MyProject POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_SOURCE_DIR}/lib/oysters.dll" $<TARGET_FILE_DIR:MyProject>)build/Debug或build/Release)。 - 临时添加DLL目录到PATH:打开命令行,先执行
set PATH=%PATH%;你的项目lib目录绝对路径,再运行生成的exe,系统就能找到DLL了。不过这只是临时生效,关闭命令行后就失效。 - 不推荐的全局方式:把lib目录添加到系统环境变量的PATH里,这样所有程序都能找到这个DLL,但会污染全局环境,除非是常用的系统级库,否则不建议这么做。
问题本质:
你用target_link_libraries链接oysters.lib,只是告诉编译器这个DLL对应的导入表符号在哪里,完成编译链接步骤。但运行时Windows系统需要自己找到DLL文件本身,它会按「exe目录→当前工作目录→系统目录→PATH目录」的顺序查找,所以得让DLL出现在这些可查找路径里。
内容的提问来源于stack exchange,提问作者BAR
相关产品推荐
相关产品推荐

