Ошибки связывания 64-битной программы Freeglut - PullRequest
0 голосов
/ 28 марта 2020

Я пытаюсь скомпилировать 64-битную версию программы OpenGL C ++, используя freeglut. Я следовал точным инструкциям на этом сайте , чтобы настроить FreeGLUT с MinGW. У меня есть заголовочные файлы в C:\MinGW\include\GL, у меня есть 32-битные библиотеки в C:\MinGW\lib и 64-битные библиотеки в C:\MinGW\lib\x64, и у меня есть 64-битная freeglut.dll в каталоге моего проекта. Однако даже самые простые программы OpenGL не могут успешно соединиться ...

Мой код минимален:

// test.cpp
#include <GL/glut.h>

int main(int argc, char *argv[]) {
    glutInit(&argc, argv);
}

И я скомпилирую его с точными командами, приведенными в файле readme / on. веб-сайт:

g++ -c -o test.o test.cpp -I"C:\MinGW\include"
g++ -o test.exe test.o -L"C:\MinGW\lib\x64" -lfreeglut -lopengl32 -Wl,--subsystem,windows

(за исключением, конечно, я изменил каталоги и изменил g cc на g ++)

Компиляция работает нормально, но компоновка выдает следующие сообщения об ошибках:

c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: test.o:test.cpp:(.text+0x1c): undefined reference to `_imp____glutInitWithExit@12'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: test.o:test.cpp:(.text+0x3f): undefined reference to `_imp____glutCreateWindowWithExit@8'
c:/mingw/bin/../lib/gcc/mingw32/9.2.0/../../../../mingw32/bin/ld.exe: test.o:test.cpp:(.text+0x61): undefined reference to `_imp____glutCreateMenuWithExit@8'
collect2.exe: error: ld returned 1 exit status

Я пытался изменить -lopengl32 в команде на -lopengl64 и -lopengl, но компоновщик не смог найти эти библиотеки.

1 Ответ

0 голосов
/ 28 марта 2020

Я не могу ответить на ваш конкретный случай c, но другой подход заключается в использовании mingw-w64 с MSYS2 в качестве менеджера пакетов. Старый проект mingw.org не поддерживается должным образом, в отличие от mingw-w64 и базы данных пакетов MSYS2. Вероятно, существует некоторое несоответствие между тем, как были скомпилированы ваши предварительно скомпилированные двоичные файлы, и используемым в данный момент компилятором.

В моей системе я скомпилировал ваш код с помощью g++ -o gl gl.cpp -lfreeglut, и он сработал впервые.

Как установить MinGW-w64 и MSYS2?

Затем используйте pacman -Ss glut, чтобы найти пакет freeglut.

...