Я пытаюсь понять что-то здесь. Если я создам первую программу из OpenGL Game Programming и запускаю ее в режиме Release, все будет работать. Я получаю куб, отображаемый в окне OpenGL. Но если я компилирую и запускаю в режиме отладки, glut.h всплывает, с огромным списком неопределенных ссылок. Я знаю, что здесь что-то не так, мне не нужно было менять файл библиотеки, поэтому я хочу понять это. Вот все ошибки:
||=== Build: Debug in chapter1 (compiler: GNU GCC Compiler) ===|
obj\Debug\chapter1.o||In function 'glutInit_ATEXIT_HACK':|
H:\AllCode\include\glut.h|486|undefined reference to '__glutInitWithExit@12'|
obj\Debug\chapter1.o||In function 'glutCreateWindow_ATEXIT_HACK':|
H:\AllCode\include\glut.h|503|undefined reference to '__glutCreateWindowWithExit@8'|
obj\Debug\chapter1.o||In function 'glutCreateMenu_ATEXIT_HACK':|
H:\AllCode\include\glut.h|549|undefined reference to '__glutCreateMenuWithExit@8'|
obj\Debug\chapter1.o||In function 'main':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|71|undefined reference to 'glutInitDisplayMode@4'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|74|undefined reference to 'glutInitWindowSize@8'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|75|undefined reference to 'glutInitWindowPosition@8'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|81|undefined reference to 'glutDisplayFunc@4'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|82|undefined reference to 'glutReshapeFunc@4'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|83|undefined reference to 'glutMouseFunc@4'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|84|undefined reference to 'glutKeyboardFunc@4'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|85|undefined reference to 'glutIdleFunc@4'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|89|undefined reference to 'glutMainLoop@0'|
obj\Debug\chapter1.o||In function 'Z10Initializev':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|102|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|102|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|108|undefined reference to 'glutSetMenu@4'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|109|undefined reference to 'glutAddMenuEntry@8'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|110|undefined reference to 'glutAttachMenu@4'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|134|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|134|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'Z12MouseHandleriiii':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|156|undefined reference to 'glutPostRedisplay@0'|
obj\Debug\chapter1.o||In function 'Z15KeyboardHandlerhii':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|177|undefined reference to 'glutPostRedisplay@0'|
obj\Debug\chapter1.o||In function 'Z15MainMenuHandleri':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|197|undefined reference to 'glutPostRedisplay@0'|
obj\Debug\chapter1.o||In function 'Z7Animatev':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|208|undefined reference to 'glutPostRedisplay@0'|
obj\Debug\chapter1.o||In function 'Z7Displayv':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|275|undefined reference to 'glutSwapBuffers@0'|
obj\Debug\chapter1.o||In function 'Z11LoadTexturePcRj':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|287|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|287|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|292|undefined reference to 'auxDIBImageLoadA@4'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|311|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|313|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'Z9DrawScene12rendermode_t':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|323|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|323|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|389|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|389|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|389|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|389|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'Z8DrawCubev':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|399|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|399|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|462|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|462|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'Z11DrawSurfacev':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|472|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|472|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|510|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|510|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'ZN11CHiResTimer17GetElapsedSecondsEm':|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|47|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|47|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|59|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|59|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'ZN11CHiResTimer6GetFPSEm':|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|70|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|70|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|84|undefined reference to '_Unwind_SjLj_Resume'|
||More errors follow but not being shown.|
||Edit the max errors limit in compiler options...|
||=== Build failed: 50 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Здесь что-то странное происходит... У меня нет AllCode, связанного с этим где угодно. У меня ничего нет в настройках Linker или Search Directory. Итак, как называется AllCode? Где он получает эту информацию и как ее изменить?
Насколько я понимаю, мне нужно, чтобы эта вещь собиралась и запускалась в режимах Debug и Release, таким образом, все ошибки адресуются. У меня это неправильно?
Моя система - 64-битная Windows 7. Однако я запускаю Code :: Blocks 13.12 32-bit. Я установил версию non-MinGW, затем установил MinGW (также 32-разрядный) и связал с ним Code :: Blocks. Использование компилятора MinGW GCC, g++ для c++, для 32-битного.
В каталог MinGW\bin я поместил OpenGL32.dll и другие DLL OpenGL. В MinGW\Include\GL Я скопировал файлы OpenGL.h. Я сделал что-то не так?
Я хочу понять, как правильно настроить вещи, чтобы я мог скомпилировать и запустить любой код OpenGL, даже если ему исполнилось 20 лет. Я не знаю, как правильно это сделать. Я был бы признателен за некоторые советы и помощь.
UPDATE: Таким образом, у меня есть файл libglut32win.a, который я нашел, и либо добавив его, либо в настройках компилятора/компоновщика/других параметров компоновщика, набрав в -lglut32win, перестает переполняться ошибками. Вместо этого я получаю:
||=== Build: Debug in chapter1 (compiler: GNU GCC Compiler) ===|
obj\Debug\chapter1.o||In function 'Z10Initializev':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|102|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|102|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|134|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|134|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'Z11LoadTexturePcRj':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|287|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|287|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|292|undefined reference to 'auxDIBImageLoadA@4'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|311|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|313|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'Z9DrawScene12rendermode_t':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|323|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|323|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|389|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|389|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|389|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|389|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'Z8DrawCubev':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|399|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|399|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|462|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|462|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'Z11DrawSurfacev':|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|472|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|472|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|510|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\chapter1.cpp|510|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'ZN11CHiResTimer17GetElapsedSecondsEm':|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|47|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|47|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|59|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|59|undefined reference to '_Unwind_SjLj_Unregister'|
obj\Debug\chapter1.o||In function 'ZN11CHiResTimer6GetFPSEm':|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|70|undefined reference to '__gxx_personality_sj0'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|70|undefined reference to '_Unwind_SjLj_Register'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|84|undefined reference to '_Unwind_SjLj_Resume'|
H:\My Documents\Coding\OpenGL\chapter1\HiResTimer.h|84|undefined reference to '_Unwind_SjLj_Unregister'|
||=== Build failed: 31 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
Так что это значит?
Это стандартные ошибки, полученные, когда вы не связаны с библиотекой. Вероятно, у ваших настроек сборки сборки есть запись для ссылки на перенасыщение, но настройки сборки Debug нет. Если вы хотите, чтобы библиотека связывалась как с Release, так и с Debug, вам нужно добавить ее на уровне проекта, а не на уровне сборки.