Ссылка GLFW некорректно работает с mingw32 в C++ (?)

Я пытаюсь скомпилировать этот пример с веб-страницы GLFW:

http://www.glfw.org/documentation.html

#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 */

        /* Swap front and back buffers */
        glfwSwapBuffers(window);

        /* Poll for and process events */
        glfwPollEvents();
    }

    glfwTerminate();
    return 0;
}

Я использую mingw32 и скачал 32-битные бинарные файлы Windows отсюда http://www.glfw.org/download.html.

Я помещаю их в соответствующие папки:

glfw3.dll в C:\Programming\MinGW32\bin и копию в моей папке main.cpp.

glfw3dll.a и libglfw3.a в C:\Programming\MinGW32\lib

GLFW folder с файлами .h в C:\Programming\MinGW32\include

Чтобы скомпилировать все, я использую это: g++ -lglfw3dll -lopengl32 main.cpp -Wall -o main.exe

И это ошибки, которые я получаю:

D:\Users\Jorge\AppData\Local\Temp\ccA4Wc7r.o:animation.cpp:(.text+0xf): undefined reference to `glfwInit'
D:\Users\Jorge\AppData\Local\Temp\ccA4Wc7r.o:animation.cpp:(.text+0x4e): undefined reference to `glfwCreateWindow'
D:\Users\Jorge\AppData\Local\Temp\ccA4Wc7r.o:animation.cpp:(.text+0x5e): undefined reference to `glfwTerminate'
D:\Users\Jorge\AppData\Local\Temp\ccA4Wc7r.o:animation.cpp:(.text+0x71): undefined reference to `glfwMakeContextCurrent'
D:\Users\Jorge\AppData\Local\Temp\ccA4Wc7r.o:animation.cpp:(.text+0x7f): undefined reference to `glfwSwapBuffers'
D:\Users\Jorge\AppData\Local\Temp\ccA4Wc7r.o:animation.cpp:(.text+0x84): undefined reference to `glfwPollEvents'
D:\Users\Jorge\AppData\Local\Temp\ccA4Wc7r.o:animation.cpp:(.text+0x90): undefined reference to `glfwWindowShouldClose'
D:\Users\Jorge\AppData\Local\Temp\ccA4Wc7r.o:animation.cpp:(.text+0x9e): undefined reference to `glfwTerminate'
C:\Programming\MinGW32\bin/ld.exe: D:\Users\Jorge\AppData\Local\Temp\ccA4Wc7r.o: bad reloc address 0x20 in section `.eh_frame'
C:\Programming\MinGW32\bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status

Я вижу, что компоновщик каким-то образом не может связать с glfw, но почему? и что я делаю? Спасибо


person Ediolot    schedule 24.05.2015    source источник


Ответы (1)


Команда, которую вы использовали для компиляции, является проблемой. Так должно быть:

g++ main.cpp -lglfw3dll -lopengl32 -lgdi32 -Wall -o main.exe

Это потому, что вы сначала компилируете main.cpp, а затем связываете с ним библиотеки. Библиотека gdi32 также необходима при создании контекста OpenGL.

person FrostyZombi3    schedule 06.06.2015