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

Linux下Premake构建GLFW项目报undefined reference链接错误

问题原因

报错属于典型的静态库符号缺失+链接配置错误,具体有两点:

  1. GLFW静态库的Linux编译配置漏加了src/posix_module.c源文件,_glfwPlatformLoadModule/_glfwPlatformFreeModule/_glfwPlatformGetModuleSymbol三个函数的实现就在该文件中,未参与编译就会出现未定义引用。你在Windows配置里加了对应的src/win32_module.c,所以Windows下编译正常。
  2. 链接配置存在疏漏:一是Linux下依赖的X11相关系统库未添加,二是共享库UiEngine自身未链接dl、pthread等基础依赖,三是可执行程序UiApp的链接顺序不符合gcc/ld的符号解析规则,四是你自定义的_X11宏无效,GLFW识别的平台宏是_GLFW_X11。
修复步骤
  • 修改GLFW模块的Premake配置,找到filter "system:linux"段的files列表,新增一行"src/posix_module.c",和其他posix前缀的源文件放在一起即可。
  • 清理无效宏定义:删除UiEngine、UiApp两个项目Linux配置段里的defines { "_X11" }内容,该宏对GLFW无效。
  • 补全GLFW模块的Linux系统依赖链接,在GLFW的filter "system:linux"段新增links配置:
links
{
    "X11",
    "Xrandr",
    "Xinerama",
    "Xcursor",
    "Xxf86vm",
    "Xi",
    "dl",
    "pthread"
}
  • 修改UiEngine项目的Linux配置段,在links列表中补上"dl"、"pthread",不要只在最终的UiApp里加这两个依赖——UiEngine作为共享库直接调用GLFW符号,自身就需要链接对应基础依赖。
  • 调整UiApp项目Linux段的链接顺序,遵循“依赖方在前、被依赖方在后”的ld解析规则,links段改为如下顺序:
links
{
    "UiEngine",
    "GLFW",
    "imgui",
    "X11",
    "Xrandr",
    "Xinerama",
    "Xcursor",
    "Xxf86vm",
    "Xi",
    "dl",
    "pthread"
}
  • 清理之前生成的bin、bin-int构建缓存目录,重新执行premake5 gmake生成构建脚本,再运行make即可正常编译。

内容的提问来源于stack exchange,提问作者Cihat Akyol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:36:16