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

使用Meson Wrap安装GLFW3后,Windows下运行可执行文件找不到libglfw3-3.dll

问题分析与解决

原因

你遇到的问题本质是Windows动态链接库的加载路径问题:

  • Meson通过Wrap安装的GLFW默认是动态链接版本,其DLL文件存放在Meson的构建缓存目录中,并没有自动复制到你的可执行文件输出目录。Windows加载DLL时会优先在当前可执行文件所在目录、系统目录等位置查找,找不到就会抛出缺失DLL的错误。
  • 之前SDL2能正常运行,是因为SDL的Wrap配置或Meson内置逻辑自动完成了DLL的复制操作,而GLFW的Wrap没有这个默认设置。

解决方案

方案1:自动复制GLFW DLL到可执行目录

在你的meson.build中添加逻辑,获取GLFW的DLL路径,并在构建时将其复制到可执行文件所在目录:

project('project', 'cpp',
  version : '0.1',
  default_options : ['warning_level=3', 'cpp_std=c++14'])

glfw_dep = dependency('glfw3')
lua_dep = dependency('lua')

# 获取GLFW动态库的路径
glfw_dll = glfw_dep.get_variable('dll')

src_files = ['axolotl.cpp', 'Window.cpp']

exe = executable('project',
           src_files,
           win_subsystem: 'windows',
           dependencies: [glfw_dep, lua_dep],
           install : true)

# 构建时自动复制GLFW DLL到可执行文件目录
custom_target('copy_glfw_dll',
              output : 'libglfw3-3.dll',
              command : ['cmd', '/c', 'copy', glfw_dll, '@OUTPUT@'],
              build_by_default : true,
              # 安装时也将DLL复制到安装目录的bin文件夹
              install : true,
              install_dir : get_option('bindir'))

构建完成后,可执行文件所在目录会自动出现libglfw3-3.dll,运行时就能正常加载。如果Lua也是动态链接版本,你可以用同样的逻辑复制Lua的DLL。

方案2:静态链接GLFW

直接将GLFW静态链接到你的可执行文件中,这样就不需要携带DLL文件:

修改meson.build中获取GLFW依赖的代码,强制使用静态库版本:

glfw_dep = dependency('glfw3', default_options : ['default_library=static'])

静态链接会把GLFW的代码直接打包进你的可执行文件,虽然会增加文件体积,但不需要额外携带DLL,更适合单文件分发的场景。Meson会自动处理GLFW静态链接所需的依赖(比如OpenGL相关库)。

内容的提问来源于stack exchange,提问作者caffeine-code

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 21:33:25