这个问题在这里已有答案:
好吧,我试着开始使用GLFW,但是当我尝试链接库时,我遇到了一些麻烦。
我正在尝试编译GLFW页面的第一个示例。
#include <GLFW/glfw3.h>
int main(void)
{
GLFWwindow* window;
/* Initialize the library */
if (!glfwInit())
return -1;
/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
glfwTerminate();
return -1;
}
/* Make the window's context current */
glfwMakeContextCurrent(window);
/* Loop until the user closes the window */
while (!glfwWindowShouldClose(window))
{
/* Render here */
glClear(GL_COLOR_BUFFER_BIT);
/* Swap front and back buffers */
glfwSwapBuffers(window);
/* Poll for and process events */
glfwPollEvents();
}
glfwTerminate();
return 0;
}
编译器
g++ -L. libglfw3dll.a -lglfw3 -lopengl32 main.cpp
在我的项目文件夹中
glfw3.dll
libglfw3dll.a
当我尝试编译它时,我得到此链接器错误
未定义的引用`__imp_glClear'
我究竟做错了什么?
/ ----------------------编辑-------------------------- - /
对不起,我忘了说一些事情,这可以澄清我的情况......
我正在使用Windows 10,64位。
编译器 - > Mingw二进制文件 - >从官方页面下载
我试图用静态库编译代码,我得到了很多未定义的引用。
g++ -L. -lopengl32 -lglu32 -lgdi32 -lglfw3 main.cpp
然后,我尝试使用动态库glfw.dll。我还链接了glfwdll.a库并在包含头之前定义了GLFW_DLL宏。
g++ -L. libglfw3dll.a -lglfw3 -lopengl32 main.cpp
使用最后一个选项,我只得到1个未定义的引用
undefined reference to `__imp_glClear'
我知道这是来自opengl32库。
我也明白我错过了一些我找不到的东西。
我来了,你能帮我一把,告诉我我错过了什么吗?
谢谢!
请阅读手册GLFW: Building applications
贝娄被引用为GNU环境的部分。如果您开发Windows应用程序,也可以在那里找到合适的说明。
GLFW支持pkg-config
,并且在构建GLFW库并随其安装时生成glfw3.pc pkg-config
文件。 pkg-config
文件描述了使用库所需的所有必需的编译时和链接时标志和依赖项。更新它们或系统之间有所不同时,您将自动获得正确的数据。
使用静态版本的GLFW库时,典型的编译和链接命令行可能如下所示:
cc `pkg-config --cflags glfw3` -o myprog myprog.c `pkg-config --static --libs glfw3`
如果您使用的是GLFW库的共享版本,只需省略--static
标志即可。
cc `pkg-config --cflags glfw3` -o myprog myprog.c `pkg-config --libs glfw3`
您还可以使用glfw3.wc文件,而无需先使用PKG_CONFIG_PATH
环境变量进行安装。
env PKG_CONFIG_PATH=path/to/glfw/src cc `pkg-config --cflags glfw3` -o myprog myprog.c `pkg-config --libs glfw3`
依赖项不包括OpenGL或GLU,因为GLFW在运行时加载任何OpenGL,OpenGL ES或Vulkan库,并且不使用GLU。在OS X上,GLU内置于OpenGL框架中,因此如果您需要GLU,则无需执行任何额外操作。如果你需要GLU并使用Linux或BSD,你应该添加glu pkg-config
包。
cc `pkg-config --cflags glfw3 glu` -o myprog myprog.c `pkg-config --libs glfw3 glu`
注意
GLU已被弃用,不应在新代码中使用,但某些遗留代码需要它。
如果您使用的是GLFW库的静态版本,请确保不要与GLU静态链接。
cc `pkg-config --cflags glfw3 glu` -o myprog myprog.c `pkg-config --static --libs glfw3` `pkg-config --libs glu`