LNK2019 Проблемы FreeGLUT/OpenGL (проблемы со связыванием библиотек)
Ну, я смотрел на множество людей, у которых есть точно такая же проблема (более или менее), но я не могу понять, в чем здесь проблема. Я пытаюсь изучать OpenGL, в основном, чтобы больше узнать о рендеринге и разработке игр, и немного разбираюсь. Тем не менее, я по профессии программист.NET, и я не касался C/C++ с тех пор, как я был в классе (хотя я только закончил в этом году).
Вот код:
#define GLUT_DISABLE_ATEXIT_HACK
#include "LUtil.h"
void runMainLoop( int val );
/*
Pre Condition:
-Initialized freeGLUT
Post Condition:
-Calls the main loop functions and sets itself to be called back in 1000 / SCREEN_FPS milliseconds
Side Effects:
-Sets glutTimerFunc
*/
int main( int argc, char* args[] )
{
//Initialize FreeGLUT
glutInit( &argc, args );
//Create OpenGL 2.1 context
glutInitContextVersion( 2, 1 );
//Create Double Buffered Window
glutInitDisplayMode( GLUT_DOUBLE );
glutInitWindowSize( SCREEN_WIDTH, SCREEN_HEIGHT );
glutCreateWindow( "OpenGL" );
//Do post window/context creation initialization
if( !initGL() )
{
printf( "Unable to initialize graphics library!\n" );
return 1;
}
//Set rendering function
glutDisplayFunc( render );
//Set main loop
glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, 0 );
//Start GLUT main loop
glutMainLoop();
return 0;
}
void runMainLoop( int val )
{
//Frame logic
update();
render();
//Run frame one more time
glutTimerFunc( 1000 / SCREEN_FPS, runMainLoop, val );
}
LUtil.h ссылается на LOpenGL.h, который ссылается на:
#ifndef LOPENGL_H
#define LOPENGL_H
#include <GL/freeglut.h>
#include <GL/glu.h>
#include <GL/gl.h>
#include <stdio.h>
#endif
Вот ошибки, которые я получаю:
2>LUtil.obj : error LNK2019: unresolved external symbol __imp_glutSwapBuffers referenced in function "void __cdecl render(void)" (?render@@YAXXZ)
2>main.obj : error LNK2019: unresolved external symbol __imp_glutInit referenced in function main
2>main.obj : error LNK2019: unresolved external symbol __imp_glutInitWindowSize referenced in function main
2>main.obj : error LNK2019: unresolved external symbol __imp_glutInitDisplayMode referenced in function main
2>main.obj : error LNK2019: unresolved external symbol __imp_glutMainLoop referenced in function main
2>main.obj : error LNK2019: unresolved external symbol __imp_glutCreateWindow referenced in function main
2>main.obj : error LNK2019: unresolved external symbol __imp_glutTimerFunc referenced in function "void __cdecl runMainLoop(int)" (?runMainLoop@@YAXH@Z)
2>main.obj : error LNK2019: unresolved external symbol __imp_glutDisplayFunc referenced in function main
2>main.obj : error LNK2019: unresolved external symbol __imp_glutInitContextVersion referenced in function main
Вот мои настройки компоновщика и пути. В каталоге CMake\common я храню freeglut. Я поместил свой x64 freeglut.dll в мой путь к исполняемому файлу и использую операционную систему x64.
Additional Dependencies: opengl32.lib;freeglut.lib;kernel32.lib;user32.lib;gdi32.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;
Include Directories: C:\CMake\common\include;$(IncludePath)
Library Directories: C:\CMake\common\lib;$(LibraryPath)
Вот учебник, который я использую (кстати, если у кого-то есть рекомендации по лучшему учебнику по OpenGL, у меня все уши, все они кажутся довольно устаревшими и любительскими): http://lazyfoo.net/tutorials/OpenGL/01_hello_opengl/index.php
Я выполнил все шаги и правильно связал свои файлы. Настоящим кикером является то, что раньше я следовал другому учебнику ( http://www.opengl-tutorial.org/); Я отказался от этого, потому что "рабочий" код, поставляемый с исходным кодом учебного пособия, отображал только белый экран вместо треугольника на черном экране, а само учебное пособие было очень трудным из-за плохих коммуникативных навыков автора. Этот, который я сейчас использую, кажется, написан лучше, но инструкции привели меня к этим ошибкам. Тем не мение. он по крайней мере побежал, и открыл окно рендеринга. Из того, что я могу сказать, мои настройки ничем не отличаются от тех, кроме того, что я использую freeglut.
Редактировать: Вы не думаете, что это немного несправедливо, модератор? Ваш пост намного шире, чем мой. Это логичный эквивалент того, что я советую идти к учебнику по C/C++ вместо публикации здесь. Логический вывод - закрыть этот сайт, потому что ресурсы доступны в другом месте.