So recently I've started a project involving GLFW (64-bit, with GLEW). However, I can't seem to get it to link correctly. Here's how I'm set up:
OS: Windows 8 64-bit
Compiler: mingw64
IDE: eclipse
My simple test program:
#include <stdio.h>
#include <stdlib.h>
#define GLEW_STATIC
#include <gl/glew.h>
#include <gl/glfw3.h>
int main(void) {
glfwInit();
puts("Hello, World!");
return (EXIT_SUCCESS);
}
How I've set up the linking: http://i.imgur.com/yyISNtZ.png
The errors (note these only occur when referencing any GLFW function. They don't occur by simply including the header):
13:33:00 **** Incremental Build of configuration Release for project MementoLibrary ****
Info: Internal Builder is used for build
gcc -O3 -Wall -c -fmessage-length=0 -o "src\\MementoLibrary.o" "..\\src\\MementoLibrary.c"
gcc -o MementoLibrary.exe "src\\MementoLibrary.o" -lglfw3 -lglew32s -lopengl32
c:/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/lib/../lib/libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0x2a7): undefined reference to `__imp_CreateDCW'
c:/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/lib/../lib/libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0x2e9): undefined reference to `__imp_GetDeviceCaps'
c:/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/lib/../lib/libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0x2fb): undefined reference to `__imp_GetDeviceCaps'
c:/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/lib/../lib/libglfw3.a(win32_monitor.c.obj):win32_monitor.c:(.text+0x31e): undefined reference to `__imp_DeleteDC'
c:/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/bin/ld.exe: c:/mingw64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.1/../../../../x86_64-w64-mingw32/lib/../lib/libglfw3.a(win32_monitor.c.obj): bad reloc address 0x0 in section `.pdata'
collect2.exe: error: ld returned 1 exit status
Your static GLFW library is compiled with the
_GLFW_NO_DLOAD_WINMM
compile-time macro enabled. This and other such macros may be found in the GLFW config header.Defining this causes GLFW to assume that you will be linking against winmm (
winmm.lib
on Visual C++ orlibwinmm.a
on MinGW). This is not the default setting for the static version of the library, so I assume you have compiled it yourself. You can either add winmm to your link-time dependencies or not define_GLFW_NO_DLOAD_WINMM
when compiling GLFW.Either solution should make your program link.