   OpenGL with Eclipse CDT and cygwin
  Hi all,I'm a newbie in the field of OpenGL programming. While poking around the internet and looking for tutorials I found the Nehe-website - it looks very helpful while doing the first OpenGL steps.I like to work with Eclipse. I used it earlier for java programming. I begun to play around with jogl (Java wrapper for OpenGL). So far it worked (code from a tutorial). I could create a window and draw polygons. Unfortunately there was not a lot of documentation. This was the reason to change to C++.I decided therefore to install the CDT and cygwin. The CDT seems to work fine - I can build an run OpenGL-free C++ programms (like C++ Hello worlds) without a problem. But I cannot build and run OpenGL code (for example Lesson1 from the Nehe-Tutorial - Visual C++ code). For me it seems to be a compiler/linker problem. Installation details: Windows XP, Service Pack 3Eclipse Europa (3.3.2) - with appropriate CDT plug-in.Cygwin 1.5.25-15 - all (newest version - todays download) - installation dir: "D:\_extended_D\" (parition C had not enough space)make, gdb and gcc-4 run in the command prompt!in C:\WINDOWS\system32 are glu32.dll, glut32.dll and opengl32.dllpath include for compiler: - "D:\_extended_D\cygwin\usr\include\w32api"- "${workspace_loc:/TutorialNehe/headers}"path include for linker: - "C:\WINDOWS\system32"- "D:\_extended_D\cygwin\lib\w32api"libraries include for linker:- glu32- glut32- opengl32ERROR MESSAGE AFTER BUILD:make all Building file: ../src/TutorialNehe.cppInvoking: Cygwin C++ Compilerg++ -I"D:\_extended_D\cygwin\usr\include\w32api" -I"C:\Dokumente und Einstellungen\All Users\workspace\TutorialNehe\headers" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/TutorialNehe.d" -MT"src/TutorialNehe.d" -o"src/TutorialNehe.o" "../src/TutorialNehe.cpp"Finished building: ../src/TutorialNehe.cpp Building target: TutorialNehe.exeInvoking: Cygwin C++ Linkerg++ -L"C:\WINDOWS\system32" -L"D:\_extended_D\cygwin\lib\w32api" -o"TutorialNehe.exe"  ./src/TutorialNehe.o   -lglu32 -lglut32 -lopengl32./src/TutorialNehe.o: In function `_Z12KillGLWindowv':/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:66: undefined reference to `_ChangeDisplaySettingsA@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:67: undefined reference to `_ShowCursor@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:72: undefined reference to `_wglMakeCurrent@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:74: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:77: undefined reference to `_wglDeleteContext@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:79: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:84: undefined reference to `_ReleaseDC@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:86: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:90: undefined reference to `_DestroyWindow@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:92: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:96: undefined reference to `_UnregisterClassA@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:98: undefined reference to `_MessageBoxA@16'./src/TutorialNehe.o: In function `_Z14CreateGLWindowPciiib':/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:124: undefined reference to `_GetModuleHandleA@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:130: undefined reference to `_LoadIconA@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:131: undefined reference to `_LoadCursorA@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:136: undefined reference to `_RegisterClassA@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:138: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:153: undefined reference to `_ChangeDisplaySettingsA@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:156: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:163: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:173: undefined reference to `_ShowCursor@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:181: undefined reference to `_AdjustWindowRectEx@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:184: undefined reference to `_CreateWindowExA@48'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:199: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:225: undefined reference to `_GetDC@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:228: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:232: undefined reference to `_ChoosePixelFormat@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:235: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:239: undefined reference to `_SetPixelFormat@12'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:242: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:246: undefined reference to `_wglCreateContext@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:249: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:253: undefined reference to `_wglMakeCurrent@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:256: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:260: undefined reference to `_ShowWindow@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:261: undefined reference to `_SetForegroundWindow@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:262: undefined reference to `_SetFocus@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:268: undefined reference to `_MessageBoxA@16'./src/TutorialNehe.o: In function `_Z7WndProcP6HWND__jjl':/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:309: undefined reference to `_PostQuitMessage@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:333: undefined reference to `_DefWindowProcA@16'./src/TutorialNehe.o: In function `WinMain':/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:345: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:358: undefined reference to `_PeekMessageA@20'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:366: undefined reference to `_TranslateMessage@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:367: undefined reference to `_DispatchMessageA@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:382: undefined reference to `_SwapBuffers@4'/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):(.text+0x23): undefined reference to `_GetModuleHandleA@4'/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):(.text+0x2d): undefined reference to `_GetCommandLineA@0'/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):(.text+0x83): undefined reference to `_GetStartupInfoA@4'/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(_cygwin_crt0_common.o):(.text+0xb1): undefined reference to `_GetModuleHandleA@4'collect2: ld returned 1 exit statusmake: *** [TutorialNehe.exe] Error 1Anybody an idea what causes the errors? Did I forget something (set a path, install a library, ...)?I'm thankful for any help(I'm now trying since one week to find out what could be wrong...)Cheers le-o   
  Those missing functions are Windows ones so you need to include the right library. This page has an explanation of which one to include (it's not quite as simple as saying just link to user32).   ;  Hi dave jthanks for your reply. I tried the link and could run the test files from that page on command line using -mwindows. Now, unfortunately, I don't know where to put that - m option in Eclipse... its alway appearing somewhere but not at the end of the command...make all Building target: TutorialNehe.exeInvoking: Cygwin C++ Linkerg++ -L"C:\WINDOWS\system32" -L"D:\_extended_D\cygwin\lib\w32api" -mwindows -o  "TutorialNehe.exe"  ./src/TutorialNehe.o   -lglu32 -lglut32 -lopengl32 -luser32./src/TutorialNehe.o: In function `_Z12KillGLWindowv':/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:66: undefined reference to `_ChangeDisplaySettingsA@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:67: undefined reference to `_ShowCursor@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:72: undefined reference to `_wglMakeCurrent@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:74: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:77: undefined reference to `_wglDeleteContext@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:79: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:84: undefined reference to `_ReleaseDC@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:86: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:90: undefined reference to `_DestroyWindow@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:92: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:96: undefined reference to `_UnregisterClassA@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:98: undefined reference to `_MessageBoxA@16'./src/TutorialNehe.o: In function `_Z14CreateGLWindowPciiib':/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:124: undefined reference to `_GetModuleHandleA@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:130: undefined reference to `_LoadIconA@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:131: undefined reference to `_LoadCursorA@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:136: undefined reference to `_RegisterClassA@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:138: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:153: undefined reference to `_ChangeDisplaySettingsA@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:156: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:163: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:173: undefined reference to `_ShowCursor@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:181: undefined reference to `_AdjustWindowRectEx@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:184: undefined reference to `_CreateWindowExA@48'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:199: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:225: undefined reference to `_GetDC@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:228: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:232: undefined reference to `_ChoosePixelFormat@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:235: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:239: undefined reference to `_SetPixelFormat@12'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:242: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:246: undefined reference to `_wglCreateContext@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:249: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:253: undefined reference to `_wglMakeCurrent@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:256: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:260: undefined reference to `_ShowWindow@8'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:261: undefined reference to `_SetForegroundWindow@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:262: undefined reference to `_SetFocus@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:268: undefined reference to `_MessageBoxA@16'./src/TutorialNehe.o: In function `_Z7WndProcP6HWND__jjl':/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:309: undefined reference to `_PostQuitMessage@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:333: undefined reference to `_DefWindowProcA@16'./src/TutorialNehe.o: In function `WinMain':/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:345: undefined reference to `_MessageBoxA@16'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:358: undefined reference to `_PeekMessageA@20'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:366: undefined reference to `_TranslateMessage@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:367: undefined reference to `_DispatchMessageA@4'/cygdrive/c/Dokumente und Einstellungen/All Users/workspace/TutorialNehe/Debug/../src/TutorialNehe.cpp:382: undefined reference to `_SwapBuffers@4'/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):(.text+0x23): undefined reference to `_GetModuleHandleA@4'/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):(.text+0x2d): undefined reference to `_GetCommandLineA@0'/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(libcmain.o):(.text+0x83): undefined reference to `_GetStartupInfoA@4'/usr/lib/gcc/i686-pc-cygwin/3.4.4/../../../libcygwin.a(_cygwin_crt0_common.o):(.text+0xb1): undefined reference to `_GetModuleHandleA@4'collect2: ld returned 1 exit statusmake: *** [TutorialNehe.exe] Error 1Cheers le-o[Edited by - Le-o on June 16, 2009 2:09:23 AM];Quote:Original post by Le-oI begun to play around with jogl (Java wrapper for OpenGL). So far it worked (code from a tutorial). I could create a window and draw polygons. Unfortunately there was not a lot of documentation. This was the reason to change to C++.If that was the only reason to switch to C++ then perhaps you should try LWJGL. It's similar to Jogl but provides OpenAL, controller and display functionality as well as gl access that's closer to regular OpenGL. It tends to be better supported and more stable than Jogl too.   ;  Another reason why I use the C++ version is CUDA. Cheers le-o   ;  Hmm... interesting... the function ChangeDisplaySettings comes from the user32 library but is not recognized even when I link it... the -mwindows seems to work on command line but not in Eclipse...and the alternative options -luser32 -Wl,--subsystem,windows I cannot set in Eclipse....Any suggestions or ideas how to make it run?Thanks le-o   ;  Okay it seems to be an unsolvable task... the interesting thing is that there are similar posts in different forums. But I could not find a solution. Therefore I'm not sure if it is possible to program OpenGL with cygwin and Eclipse CDT?!If someone found a solution I would appreciate to hear it!Cheers le-o   