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

Ubuntu 16下手动编译GLFW失败,apt-get安装却成功的问题咨询

解决Ubuntu 16上GLFW3手动编译失败、示例代码未定义引用的问题

嘿,我之前在Ubuntu上折腾GLFW3的时候也踩过一模一样的坑!手动编译安装各种报错,换用apt-get一键安装就秒成,其实问题根源很明确——手动编译时的配置或安装路径没处理好,导致编译器/链接器找不到GLFW的库文件。

一、先说说手动编译为啥会失败

你遇到的情况大概率是这几个原因之一:

  • 安装路径不在系统默认搜索列表里:默认手动编译会把库装到/usr/local/lib,但Ubuntu的链接器有时候不会自动扫这个路径,或者你编译示例时没手动指定-L/usr/local/lib。
  • cmake参数没配全:比如你虽然加了-DBUILD_SHARED_LIBS=ON建共享库,但可能没指定-DCMAKE_INSTALL_PREFIX=/usr,导致库装到了非系统默认目录。
  • 忘了更新系统库缓存:手动安装完没跑sudo ldconfig,系统压根不知道你装了新库,链接器自然找不到。

二、为啥apt-get安装就这么省心?

Ubuntu官方源里的libglfw3和libglfw3-dev包已经把所有细节给你处理妥了:

  • 库文件直接放到/usr/lib(系统链接器默认搜索的路径)
  • 头文件自动丢去/usr/include(编译器默认找头文件的地方)
  • 安装完成后自动更新库缓存,根本不用你手动操作

三、如果非要手动编译,给你一套稳的步骤

要是你还是想自己编译源码(比如要装特定版本),按下面的步骤来绝对没问题:

  1. 先装编译依赖:
sudo apt-get install build-essential cmake xorg-dev libglu1-mesa-dev
  1. 下载源码解压:
wget https://github.com/glfw/glfw/releases/download/3.3.8/glfw-3.3.8.zip
unzip glfw-3.3.8.zip
cd glfw-3.3.8
  1. 建构建目录,用cmake配置(关键是指定安装到系统默认路径):
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_PREFIX=/usr ..
  1. 编译+安装,最后更新库缓存:
make -j$(nproc)  # 用全核心编译,更快
sudo make install
sudo ldconfig
  1. 编译示例代码时,记得链接GLFW和OpenGL库:
    比如你的测试文件是test.c,编译命令得这么写:
gcc test.c -o test -lglfw -lGL

四、关于「未定义引用」错误的本质

这个错误说白了就是:编译器能找到GLFW的头文件(所以编译阶段没报错),但链接器找不到对应的共享库文件。手动安装时路径不对或者没更缓存,链接器就找不到libglfw.so,自然报未定义引用。而apt装的库在默认路径,链接器直接就能找到,所以编译一次过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:26:20