GLFW无法正确链接

时间:2013-09-07 17:34:41

标签: c gcc glew glfw

所以最近我开始了一个涉及GLFW(64位,带GLEW)的项目。但是,我似乎无法正确链接。这就是我的设置方式:

操作系统:Windows 8 64位

编译器:mingw64

IDE:eclipse

我的简单测试程序:

#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);
}

我如何设置链接:http://i.imgur.com/yyISNtZ.png

错误(注意这些仅在引用任何GLFW函数时发生。仅通过包含标题不会发生这些错误):

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

1 个答案:

答案 0 :(得分:3)

您的静态GLFW库是在启用_GLFW_NO_DLOAD_WINMM编译时宏的情况下编译的。可以在GLFW配置头中找到此宏和其他此类宏。

定义此选项会导致GLFW假定您将链接winmm(Visual C ++上的winmm.lib或MinGW上的libwinmm.a)。这不是库的静态版本的默认设置,所以我假设您已经自己编译了它。您可以在链接时依赖项中添加winmm,也可以在编译GLFW时不定义_GLFW_NO_DLOAD_WINMM

任何一种解决方案都应该使您的程序链接。