首页 > 解决方案 > 链接glfw g++

问题描述

我一直在尝试在不使用 IDE 的情况下使用 OpenGL 进行编码,但是手动链接确实让我感到困惑。我有一个包含 libglfw3.a、glfw3.h 和一个包含此示例代码的 .cpp 文件的文件夹。

#include "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++ source.cpp -lglfw3 -o program

然而我得到了这些错误。

C:\Users\murra\Coding\Manual>g++ source.cpp -lglfw3 -o proc
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x17): undefined reference to `glfwInit'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x56): undefined reference to `glfwCreateWindow'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x64): undefined reference to `glfwTerminate'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x76): undefined reference to `glfwMakeContextCurrent'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x81): undefined reference to `glfwWindowShouldClose'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0x96): undefined reference to `_imp__glClear@4'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0xa6): undefined reference to `glfwSwapBuffers'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0xab): undefined reference to `glfwPollEvents'
C:\Users\murra\AppData\Local\Temp\ccO7xs1Q.o:source.cpp:(.text+0xb2): undefined reference to `glfwTerminate'
collect2.exe: error: ld returned 1 exit status

我对这些东西很陌生,所以我们将不胜感激。

标签: c++openglg++glfw

解决方案


当您链接第三方库时,您需要“告诉”编译器标头的位置以及库的位置。

通常,除了-l<lib_name>之外,还会使用-I<header_dir>-L< lib_dir>

您还可以使用-I<header_dir>-L<full_lib_path>将其减少到 2 个步骤

如果链接导致错误,IMO 有 3 个主要原因。

  1. 路径不正确
  2. 混合共享库和静态库标志(示例 - VS 上的-MT-MD )
  3. 您未包含的其他库依赖项。

在您的情况下,缺少的符号似乎来自其他库。尝试-lglfw3 -lglew32 -lopengl32 -lgdi32作为附加选项。显然,这些需要在您的计算机上。


推荐阅读