如何构建和安装 GLFW 3 并在 Linux 项目中使用它
- 2024-10-14 08:40:00
- admin 原创
- 130
问题描述:
GLFW3
昨晚我加班尝试从源代码构建 Linux 版 GLFW 3 软件包。这个过程花了我很长时间,总共大约 3 个小时,部分原因是我不熟悉 CMake,部分原因是我不熟悉 GLFW。
我希望这篇文章能帮你摆脱我昨天遇到的困难!我想我应该写一篇简短的文章,希望能帮你节省几个小时的时间……
感谢 #glfw IRC 频道上的“urraka”、“b6”和“niklas”,我已经能够让 glfw 版本 3.0.1 正常运行。
事实证明这不是一个简单的过程(对我来说肯定不是,我不是专家),因为网络上没有太多关于 glfw3 的文档,特别是关于使用 CMake 进行设置的文档。
我被要求将其分成问答部分,所以我这样做了,答案部分现在如下。
您是 GLFW 的维护者,或者是 GLFW 团队的成员吗?
如果任何 GLFW3 维护人员看到此信息,那么我想告诉他们,请在您的网站上添加“在 Windows、Mac OS X 和 Linux 上设置 GLFW3”部分!使用 GLFW 编写程序非常容易,因为在线文档非常好,快速浏览所有可用的类和模块,您就可以开始了。此处提供的测试项目示例也非常好。我发现的两个主要问题是,首先如何在我的系统上设置 GLFW3,其次如何构建 GLFW3 项目?对于非专家来说,这两件事可能还不够清楚。
编辑
今天 (日期:2014-01-14) 简单看了一下,GLFW 网站似乎自从我上次看之后已经发生了很大的变化,现在有一个关于编译 GLFW 和用 GLFW 构建程序的部分,我认为这是新的。
解决方案 1:
步骤 1:使用 CMAKE 在系统上安装 GLFW 3
对于这次安装,我使用的是 KUbuntu 13.04,64 位。
第一步是从www.glfw.org下载最新版本(假设未来的版本以类似的方式工作) ,可能使用此链接。
下一步是提取档案,然后打开终端。cd
进入 glfw-3.XX 目录并运行,cmake -G "Unix Makefiles"
您可能需要提升权限,并且可能还需要先安装构建依赖项。为此,请尝试sudo apt-get build-dep glfw
或 手动执行sudo apt-get build-dep glfw3
, 就像我使用的那样……您可能需要其他库,例如 pthread 库……显然我已经有了它们。(请参阅下面提供给 g++ 链接器阶段的 -l 选项。)sudo apt-get install cmake xorg-dev libglu1-mesa-dev
现在您可以输入make
然后make install
,这可能需要您sudo
先。
好的,您应该会获得最后三个 CMake 阶段的一些详细输出,告诉您已构建的内容或将其放置在哪里。(/usr/include
例如,在。)
第 2 步:创建测试程序并编译
下一步是启动 vim(“什么?!vim?!”你会说)或您喜欢的 IDE / 文本编辑器...我没有使用 vim,而是使用了 Kate,因为我使用的是 KUbuntu 13.04...无论如何,从这里(在页面底部)下载或复制测试程序并保存,退出。
现在使用进行编译g++ -std=c++11 -c main.cpp
- 不确定是否需要c++11但是我使用了nullptr
它,我需要它...您可能需要将您的 gcc 升级到版本 4.7,或者即将推出的版本 4.8...此处有相关信息。
然后,如果您手动输入了程序或试图“太聪明”而某些东西没有起作用,请修复您的错误……然后使用这个怪物链接它!g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi
所以你看,在“安装构建依赖项”部分,您可能还需要检查您是否安装了 GL、GLU、X11 Xxf86vm(无论是什么)Xrandr posix-thread 和 Xi(无论是什么)开发库。也许还要更新您的图形驱动程序,我认为 GLFW 3 可能需要 OpenGL 版本 3 或更高版本?也许有人可以证实这一点?如果您获得未定义的引用(感谢@user2255242),您可能还需要添加链接器选项-ldl -lXinerama -lXcursor
以使其正常工作。dlclose
是的,我确实需要那么多-l
!
步骤3:您已完成,祝您有美好的一天!
希望这些信息是正确的,一切都对你有用,并且你喜欢编写 GLFW 测试程序。还希望本指南已经或将来会帮助一些像我昨天一样挣扎的人!
顺便说一句,所有标签都是我在 stackoverflow 上搜索不存在的答案时搜索的内容。(直到现在。)如果您与我处于类似的情况,希望它们也是您搜索的内容。
作者注:
这可能不是一个好主意。这种方法(使用 sudo make install)可能会对您的系统造成危害。(请参阅不要破坏 Debian)
理想情况下,我或其他人应该提出一个解决方案,不仅仅是将 lib 文件等安装到系统默认目录中,因为这些应该由诸如 之类的包管理器进行管理apt
,这样做可能会导致冲突并破坏您的包管理系统。
请参阅新的“2020 答案”以寻找替代解决方案。
解决方案 2:
我用这种方法解决了
pkg-config 文件描述了使用库所需的所有必要的编译时和链接时标志以及依赖项。
pkg-config --static --libs glfw3
告诉我
-L/usr/local/lib -lglfw3 -lrt -lXrandr -lXinerama -lXi -lXcursor -lGL -lm -ldl -lXrender -ldrm -lXdamage -lX11-xcb -lxcb-glx -lxcb-dri2 -lxcb-dri3 -lxcb-present -lxcb-sync -lxshmfence -lXxf86vm -lXfixes -lXext -lX11 -lpthread -lxcb -lXau -lXdmcp
我不知道所有这些库对于编译是否真的是必要的,但对我来说它是有效的......
解决方案 3:
-l
请注意,如果您使用该选项安装 glfw,则不需要那么多s BUILD_SHARED_LIBS
。(您可以通过先运行来启用此选项ccmake
)。
这样sudo make install
就可以在 中安装共享库/usr/local/lib/libglfw.so
。然后你可以使用以下命令编译示例文件:
g++ main.cpp -L /usr/local/lib/ -lglfw
然后,在运行程序之前,不要忘记将 /usr/local/lib/ 添加到共享库的搜索路径中。可以使用以下命令完成此操作:
export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH}
您可以将其放入您的文件中~/.bashrc
,这样就不必一直输入它了。
解决方案 4:
2020 年更新答案
现在是 2020 年(7 年后),在此期间我对 Linux 有了更多的了解。具体来说,在安装库时运行可能不是一个好主意sudo make install
,因为这些库可能会干扰包管理系统。(在这种情况下,apt
我使用的是 Debian 10。)
如果不正确,请在评论中纠正我。
建议的替代解决方案
该信息取自 GLFW 文档,但我扩展/简化了与 Linux 用户相关的信息。
转到主目录并从 github 克隆 glfw 存储库
cd ~
git clone https://github.com/glfw/glfw.git
cd glfw
此时,您可以创建一个构建目录并按照此处的说明(glfw 构建说明)进行操作,但我选择不这样做。以下命令似乎在 2020 年仍然有效,但 glfw 在线说明并未明确说明。
cmake -G "Unix Makefiles"
您可能需要
sudo apt-get build-dep glfw3
在(?)之前运行。我sudo apt install xorg-dev
按照说明运行了此命令。最后运行
make
现在在您的项目目录中,执行以下操作。(转到使用 glfw 库的项目)
创建一个
CMakeLists.txt
,我的看起来像这样
CMAKE_MINIMUM_REQUIRED(VERSION 3.7)
PROJECT(project)
SET(CMAKE_CXX_STANDARD 14)
SET(CMAKE_BUILD_TYPE DEBUG)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory(/home/<user>/glfw /home/<user>/glfw/src)
FIND_PACKAGE(OpenGL REQUIRED)
SET(SOURCE_FILES main.cpp)
ADD_EXECUTABLE(project ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(project glfw)
TARGET_LINK_LIBRARIES(project OpenGL::GL)
如果你不喜欢 CMake,那么我很抱歉,但在我看来,这是让你的项目快速运行的最简单方法。我建议学习使用它,至少要达到基本水平。遗憾的是我不知道有什么好的 CMake 教程
然后执行
cmake .
,make
你的项目应该被构建并链接到 glfw3 共享库有某种方法可以创建动态链接库。我相信我在这里使用了静态方法。如果您比我了解得更多,请在下面的答案中评论/添加一个部分。
这应该适用于其他系统,如果不行请告诉我,我会尽力提供帮助
解决方案 5:
由于接受的答案不允许进一步编辑,我将使用单个复制粘贴命令对其进行总结(将第一行中的 3.2.1 替换为最新版本):
version="3.2.1" && \nwget "https://github.com/glfw/glfw/releases/download/${version}/glfw-${version}.zip" && \nunzip glfw-${version}.zip && \ncd glfw-${version} && \nsudo apt-get install cmake xorg-dev libglu1-mesa-dev && \nsudo cmake -G "Unix Makefiles" && \nsudo make && \nsudo make install
如果您想编译程序,请使用以下命令:
g++ -std=c++11 -c main.cpp && \ng++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor
如果你正在按照 learnopengl.com 教程操作,你可能还需要设置 GLAD。在这种情况下,请点击此链接
然后点击网站右下角的“生成”按钮,下载 zip 文件。解压并使用以下命令编译源代码:
g++ glad/src/glad.c -c -Iglad/include
现在,编译程序的命令变成这样:
g++ -std=c++11 -c main.cpp -Iglad/include && \ng++ main.o glad.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor
解决方案 6:
这为我解决了这个问题:
sudo apt-get update
sudo apt-get install libglfw3
sudo apt-get install libglfw3-dev
摘自https://github.com/glfw/glfw/issues/808
解决方案 7:
很棒的指南,谢谢。根据这里的大部分说明,它几乎可以帮我构建,但我确实有一个错误。
/usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.c.o): undefined reference to symbol 'dlclose@@GLIBC_2.2.5'
//lib/x86_64-linux-gnu/libdl.so.2: error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
搜索此错误后,我不得不添加-ldl
到命令行。
g++ main.cpp -lglfw3 -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl
然后编译并链接“hello GLFW”示例应用程序。
我对 Linux 还很陌生,所以我不完全确定这个额外的库到底有什么用处……除了修复我的链接错误。不过,我确实在上面的帖子中看到了那个 cmd 行开关。
解决方案 8:
如果有人变得懒惰并且可能不知道如何为所有这些库和-l配置 shell ,那么我创建了一个 python 脚本(你必须拥有 python3,大多数 linux 用户都有它。)它允许你轻松编译脚本并运行它们而不必担心太多,它只有常规的系统调用,只是排列整齐,我为自己创建了它,但也许它会很有用:在这里
解决方案 9:
详细描述的答案已经存在,但我经历了这个更简短的秘诀:
安装Linuxbrew
$ brew install glfw
cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include
sudo cp -R GLFW /usr/include
解释:我们设法通过 Linuxbrew(深受喜爱的 Homebrew 的 Linux 移植版)的 CMAKE 构建 GLFW。然后将头文件复制到 Linux 读取的位置(/usr/include
)。
解决方案 10:
手动管理库很累,而且很难管理。其他人提出的很多解决方案都很棒,但我建议使用可以为您管理所有这些东西的跨平台包管理器,例如 vcpkg。只需安装 vcpkg,您就可以轻松安装、卸载和维护所需的任何库。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件