SystemLight
V2EX  ›  C

使用 cmake 在 windows 平台下编译后运行可执行文件为什么会 提示 `由于找不到 libgio-2.0-0.dll` ?

By SystemLight at 2021 年 3 月 11 日 · 3700 次点击
  • 在 IDE(CLion)中运行软件一切正常,编译后为什么缺失 dll 呢
  • cmake 难道不能自动把以来 dll 加入进来么
  • 为什么 IDE 中执行文件可以,但是执行编译后 exe 就提示缺少 dll 呢
  • 该如何解决,能否在 cmake 配置项中配置解决
8 条回复  •  2021-03-11 19:19:53 +08:00
pursuer
   1
pursuer  
   2021 年 3 月 11 日
windows 能不能找到 dll 取决于你的 PATH 环境变量等,cmake 只是在生成的文件中标记用到了这个 dll,但查找是 windows
pursuer
   2
pursuer  
   2021 年 3 月 11 日
忘写解决方法了,你可以把 dll 文件夹加入到 PATH 或者把 dll 放到可执行文件目录下试试
bruce0
   3
bruce0  
   2021 年 3 月 11 日
linux 可以通过制定 rpath 来指定动态库目录

Windows 上好像没有这个东西 Windows 上程序会在 path 和.exe 的当前目录找 .dll 文件

所以可以把需要的 .dll 文件放到 path 目录 或者 .exe 的目录中
SystemLight
   4
SystemLight  
OP
   2021 年 3 月 11 日
@pursuer cmake 可不可以配置将需要的动态链库一起编译打包到应用程序中
SystemLight
   5
SystemLight  
OP
   2021 年 3 月 11 日
@pursuer 是的,加入环境变量是没有问题的,但是问题是程序需要分发到不同主机,每次配置环境变量很麻烦
SystemLight
   6
SystemLight  
OP
   2021 年 3 月 11 日
@bruce0 cmake 有没有功能可以自己复制这个 dll 到程序目录呢
bruce0
   7
bruce0  
   2021 年 3 月 11 日
set(LIBRARY_OUTPUT_PATH XXX) 可以设置生成的动态库的目录

详细的可以看一下这个 https://juejin.cn/post/6936408961050476558
systemcall
   8
systemcall  
   2021 年 3 月 11 日 via Android
试试把 DLL 和 exe 放在同一级目录
可以用静态编译试试,程序会大很多,但是应该就不会报缺 DLL 的错误了
© 2026 V2EX · 35ms · 3.9.8.5