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

Manjaro编译OpenGL SuperBible 6示例遇GLFW函数未定义引用错误

解决Manjaro下编译《OpenGL超级宝典》第6版示例代码的GLFW未定义引用问题

你遇到的问题本质是版本不兼容:你通过pacman安装的glfw-wayland是GLFW 3.x版本,而《OpenGL超级宝典》第6版的示例代码是针对GLFW 2.x编写的。报错里的glfwOpenWindowHint、glfwOpenWindow等函数都是GLFW 2.x的专属API,在GLFW 3.x中已经被完全废弃并移除,所以链接器找不到这些符号。

下面提供两个可行的解决方案,你可以根据需求选择:

方案一:适配GLFW 3.x API(推荐)

GLFW 2.x早已停止维护,适配新版API是更稳妥的长期方案。你需要修改示例代码中sb6/application.cpp里的run方法,将旧API替换为GLFW 3.x的对应接口:

  • glfwOpenWindowHint → glfwWindowHint
  • glfwOpenWindow → glfwCreateWindow(同时需要调整窗口创建的参数逻辑)
  • glfwGetDesktopMode → 结合glfwGetPrimaryMonitor和glfwGetVideoMode实现
  • glfwSetMousePosCallback → glfwSetCursorPosCallback
  • glfwSetMouseWheelCallback → glfwSetScrollCallback
  • glfwEnable/glfwDisable → glfwSetInputMode
  • glfwGetWindowParam → glfwGetWindowAttrib

举个具体的替换示例:
原GLFW 2.x代码:

glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, info.major);
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, info.minor);

替换为GLFW 3.x代码:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, info.major);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, info.minor);

修改完成后,确保CMakeLists.txt中正确链接GLFW 3.x库(你之前修改的配置应该已经覆盖这部分)。

方案二:编译使用GLFW 2.x版本

如果不想修改代码,可以编译示例代码对应的旧版GLFW:

  1. 下载GLFW 2.x的最后稳定版本(比如2.7.10)的源码
  2. 编译并安装:
    mkdir build && cd build
    cmake .. -DBUILD_SHARED_LIBS=ON
    make && sudo make install
    
  3. 修改sb6code的CMakeLists.txt,指定链接这个旧版GLFW库,例如:
    find_library(GLFW_LIBRARY NAMES glfw PATHS /usr/local/lib)
    target_link_libraries(wrapmodes ${GLFW_LIBRARY}) # 替换为你的目标程序名
    

注意:GLFW 2.x对Wayland环境的支持非常有限,可能会出现显示异常,因此更推荐方案一。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 12:07:57