链接GLFW库错误

时间:2017-12-23 01:17:44

标签: c++ opengl glfw

好吧,我试着开始使用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&#39;

的未定义引用

我做错了什么?

/ ----------------------编辑-------------------- -------- /

抱歉,我忘了说一些事情,这可以澄清我的情况......

我正在使用Windows 10,64位。

编译器 - &gt; MinGW的 二进制文件 - &gt;从官方页面下载

我尝试用静态库编译代码,我得到了很多未定义的引用。

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库。

我也明白,我错过了一些我无法找到的东西。

我再来一次,你能帮我一把,告诉我我错过了什么吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

请阅读手册GLFW: Building applications

Bellow被引用为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.pc文件,而无需先使用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,Op​​enGL 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`