4

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

操作系统:Windows 8 64 位

编译器:mingw64

IDE:日食

我的简单测试程序:

#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
4

2 回答 2

3

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

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

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

于 2013-10-28T21:07:28.310 回答
0

我下载了 GLFW 库并从源代码在 msys2 中编​​译。我对 cmake 不够熟悉,所以我只是复制了glfw-3.3.6/examples/offscreen.cto myproject/main.cpp. 我也得到了undefined reference to __imp_CreateDCW错误(和其他错误)。我只需要添加-lgdi32到链接器标志。

这是我的编译命令:

g++ -I../glfw-3.3.6/include -I../glfw-3.3.6/deps main.cpp ../glfw-3.3.6/deps/glad_gl.c -o main -L../glfw-3.3.6/build/src -lglfw3 -lgdi32

这是我的Makefile

GLFW_DIR = ../glfw-3.3.6
CXXFLAGS += -I$(GLFW_DIR)/include
CXXFLAGS += -I$(GLFW_DIR)/deps
LFLAGS += -L$(GLFW_DIR)/build/src -lglfw3
LFLAGS += -lgdi32

main: main.cpp $(GLFW_DIR)/deps/glad_gl.c
    $(CXX) $(CXXFLAGS) $^ -o $@ $(LFLAGS)
于 2022-01-19T19:20:36.507 回答