如何构建和安装 GLFW 3 并在 Linux 项目中使用它

2024-10-14 08:40:00
admin
原创
123
摘要:问题描述:GLFW3昨晚我加班尝试从源代码构建 Linux 版 GLFW 3 软件包。这个过程花了我很长时间,总共大约 3 个小时,部分原因是我不熟悉 CMake,部分原因是我不熟悉 GLFW。我希望这篇文章能帮你摆脱我昨天遇到的困难!我想我应该写一篇简短的文章,希望能帮你节省几个小时的时间……感谢 #glf...

问题描述:

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。在这种情况下,请点击此链接

http://glad.dav1d.de/#profile=core&specification=gl&api=gl%3D3.3&api=gles1%3Dnone&api=gles2%3Dnone&api=glsc2%3Dnone&language=c&loader=on

然后点击网站右下角的“生成”按钮,下载 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:

详细描述的答案已经存在,但我经历了这个更简短的秘诀:

  1. 安装Linuxbrew

  2. $ brew install glfw

  3. cd /home/linuxbrew/.linuxbrew/Cellar/glfw/X.X/include

  4. sudo cp -R GLFW /usr/include

解释:我们设法通过 Linuxbrew(深受喜爱的 Homebrew 的 Linux 移植版)的 CMAKE 构建 GLFW。然后将头文件复制到 Linux 读取的位置(/usr/include)。

解决方案 10:

手动管理库很累,而且很难管理。其他人提出的很多解决方案都很棒,但我建议使用可以为您管理所有这些东西的跨平台包管理器,例如 vcpkg。只需安装 vcpkg,您就可以轻松安装、卸载和维护所需的任何库。

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用