如何构build和安装GLFW 3并将其用于Linux项目

GLFW3

昨天晚上,我正在努力尝试从源代码为Linux构buildGLFW 3软件包。 这个过程花了我很长时间,总共花了3个小时,部分原因是我不熟悉CMake,部分原因是我对GLFW不熟悉。

我希望这篇文章能够让你免于昨天的困难! 我想我应该做一个简短的报告,希望能为你节省几个小时的时间。

感谢#glfw IRC频道的“urraka”,“b6”和“niklas”,我得到了glfw 3.0.1版本的工作。

事实certificate,这不是一个微不足道的过程(当然不是对我来说,我不是专家),因为网上关于glfw3的文档并不多,特别是关于使用CMake进行设置。

我被要求把它分成一个问题和答案部分,所以我已经这样做了,答案部分现在在下面。

你是GLFW的维护者还是GLFW团队的成员?

如果有任何GLFW3的维护者看到这个,那么我给他们的消息是请在你的网站上添加一个“在Windows,Mac OS X和Linux上设置GLFW3”部分! 使用GLFW编写程序相当容易,因为在线文档相当不错,可以快速扫描所有可用的类和模块,然后就可以开始了。 这里的一个testing项目的例子也很好。 我发现的两个主要问题是,首先如何在我的系统上设置GLFW3,其次是如何构buildGLFW3项目? 对于非专家来说,这两件事情可能还不够清楚。

编辑

今天有一个简短的看看(date:2014-01-14),看起来GLFW网站自从我上次看了以后发生了很大的变化,现在有一个关于编写GLFW和GLFW的build筑程序的章节,我认为这是新的。

第1步:使用CMAKE在您的系统上安装GLFW 3

对于这个安装,我使用的是KUbuntu 13.04,64位。

第一步是从www.glfw.org下载最新版本(假设将来以相似的方式工作),可能使用这个链接 。

下一步是提取档案,并打开一个terminal。 进入glfw-3.XX目录并运行cmake -G "Unix Makefiles"你可能需要提升权限,而且你可能还需要首先安装构build依赖关系 。 要做到这一点,尝试使用sudo apt-get build-dep glfw sudo apt-get build-dep glfw3 或者 手动执行 ,就像我用sudo apt-get install cmake xorg-dev libglu1-mesa-dev …是你需要的其他库,如pthread库…显然,我已经拥有了它们。 (请参阅下面给出的g ++链接器阶段的-l选项。)

现在你可以inputmake然后make install ,这可能会要求你先sudo

好的,你应该在最后三个CMake阶段得到一些详细的输出,告诉你已经build立了什么或者已经放置了哪些地方。 (例如,在/usr/include 。)

第2步:创build一个testing程序并编译

下一步是启动vim(“what ?! vim ?!”)或者你喜欢的IDE /文本编辑器…我没有使用vim,我使用了Kate,因为我在KUbuntu 13.04上。无论如何,从这里下载或复制testing程序(在页面底部)并保存,退出。

现在使用g++ -std=c++11 -c main.cpp编译 – 不确定是否需要c ++ 11,但是我使用了nullptr所以我需要它…您可能需要将gcc升级到版本4.7,或者即将到来的版本4.8 …在这里的信息。

然后修复你的错误,如果你手工input程序或试图是“太聪明”,并没有工作…然后链接它使用这个怪物! g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi所以你看,在“install build dependencies”部分,你可能还想检查你有GL,GLU ,X11 Xxf86vm(不pipe是什么)Xrandr posix-thread和Xi(不pipe是什么) 开发库也安装。 也许更新您的graphics驱动程序,我认为GLFW 3可能需要OpenGL版本3或更高? 也许有人可以证实这一点? 您可能还需要添加链接器选项-ldl -lXinerama -lXcursor才能使其正确工作,以便获取对dlclose未定义引用(信用额度@ user2255242)。

而且,是的,我真的需要这么多-l我!

第3步:你完成了,祝你有美好的一天!

希望这个信息是正确的,一切都为你工作,你喜欢写GLFWtesting程序。 也希望这个指南能够帮助或者帮助一些将来像昨天一样挣扎的人!

顺便说一下,所有的标签都是我在stackoverflow上search的东西,找不到一个答案。 (到现在为止)如果你和我自己处于类似的位置,希望他们是你所寻找的。

请注意,如果使用BUILD_SHARED_LIBS选项安装glfw,则不需要那么多-l s。 (您可以通过首先运行ccmake启用此选项)。
这样sudo make install会将共享库安装在/usr/local/lib/ligglfw.so 。 然后你可以用一个简单的例子来编译示例文件:

 g++ main.cpp -L /usr/local/lib/ -lglfw 

那么在运行你的程序之前,不要忘记把/ usr / local / lib /添加到共享库的searchpath中。 这可以使用:

 export LD_LIBRARY_PATH=/usr/local/lib:${LD_LIBRARY_PATH} 

你可以把它放在你的〜/ .bashrc中,所以你不必一直input。

我以这种方式解决了这个问题

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 

我不知道是否所有这些库实际上是编译的必要条件,但对我来说它是可行的…

很好的指导,谢谢。 在这里给大多数指示,它几乎为我build立,但我确实有一个剩余的错误。

 /usr/bin/ld: //usr/local/lib/libglfw3.a(glx_context.co): 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 

search这个错误之后,我不得不在命令行中添加-ldl

 g++ main.cpp -lglfw3 -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor -lGL -lpthread -ldl 

然后编译并链接“hello GLFW”示例应用程序。

我是相当新的Linux,所以我不完全确定这个额外的库是什么…除了解决我的链接错误。 但是,我在上面的post中看到了cmd行开关。

由于接受的答案不允许进行更多的编辑,因此我将使用一个复制粘贴命令(将XXXreplace为第一个命令中提供的最新版本)来恢复它:

 set version=XXX && \ wget "https://github.com/glfw/glfw/releases/download/${version}/glfw-${version}.zip" && \ unzip glfw-${version}.zip && \ cd glfw-${version}.zip && \ sudo apt-get install cmake xorg-dev libglu1-mesa-dev && \ sudo cmake -G "Unix Makefiles" && \ sudo make && \ sudo make install 

如果你想编译一个程序,使用下面的命令:

 g++ -std=c++11 -c main.cpp && \ g++ main.o -o main.exec -lGL -lGLU -lglfw3 -lX11 -lXxf86vm -lXrandr -lpthread -lXi -ldl -lXinerama -lXcursor