我正在尝试将GLFW链接到我的C程序。
文档似乎建议使用#include<GLFW/glfw3.h>
,但是我已经安装了2.7.2(从我的发行版的仓库中),并且没有该头文件:
find / -name *glfw* 2> /dev/null
/usr/lib/libglfw.so.2.6
/usr/lib/libglfw.a
/usr/lib/libglfw.so
/usr/lib/pkgconfig/libglfw.pc
/usr/lib/libglfw.so.2
/usr/include/GL/glfw.h
/usr/share/doc/libglfw-dev
/usr/share/doc/libglfw2
/var/cache/apt/archives/libglfw2_2.7.2-1_i386.deb
/var/cache/apt/archives/libglfw-dev_2.7.2-1_i386.deb
/var/lib/dpkg/info/libglfw2.list
/var/lib/dpkg/info/libglfw2.postinst
/var/lib/dpkg/info/libglfw-dev.md5sums
/var/lib/dpkg/info/libglfw2.postrm
/var/lib/dpkg/info/libglfw2.md5sums
/var/lib/dpkg/info/libglfw2.shlibs
/var/lib/dpkg/info/libglfw-dev.list
我尝试了#include<GL/glfw.h>
,但仍然得到undefined reference to 'glfwLoadTexture2D'
如何链接到GLFW并使用glfwLoadTexture2D()
?
3条答案
按热度按时间zyfwsgd61#
#include
对链接器没有任何作用;它只是引入了 * 声明 *,而不是实际的函数。The documentation表示GLFW使用pkg-config(这并不奇怪;@elmindreda知道她的东西),所以你的编译行应该是这样的:
还要注意,因为库使用
pkg-config
,所以你不应该“关心”诸如头文件和库文件在特定安装中的位置之类的细节。只要使用--cflags
和--libs
模式询问,你就会得到正确的返回位置,如上面的示例所示。w51jfk4q2#
你把编译和链接搞混了。如果你缺少了头文件,你可能会比链接阶段更快地出现错误。
“Undefined reference”是由于链接器找不到符号造成的。最可能的原因是您没有告诉
gcc
它应该链接到GLFW库:6tr1vspr3#
当我在Linux上时,我编译opengl/glfw项目,如下所示:
当我在windows上时,我通过编写以下代码来编译它们:
我把libglfw3.a文件放在main.c所在的目录下。我听说有人说他们在写
-lopengl32 -lgdi32 -luser32 -lkernel32 -lws2_32
之前不能正确链接。另一件值得一提的事情是,当我下载32位glfw二进制文件时,我不能链接glfw库。当我下载64位glfw二进制文件时,一切都正常。我有一台64位的机器和一个x86_64-w 64-mingw 32.我读过一些有相反经历的人的评论,他们在下载64位二进制文件时无法链接glfw库,但在下载32位二进制文件后却能链接它们。我的建议是两种都试试。