4

そこで最近、GLFW (64 ビット、GLEW 付き) を含むプロジェクトを開始しました。ただし、正しくリンクできないようです。設定方法は次のとおりです。

OS: Windows8 64bit

コンパイラ: 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.libVisual C++ またはlibwinmm.aMinGW 上) に対してリンクすると想定します。これはライブラリの静的バージョンのデフォルト設定ではないため、自分でコンパイルしたと仮定します。リンク時の依存関係に winmm を追加するか、_GLFW_NO_DLOAD_WINMMGLFW をコンパイルするときに定義しないようにすることができます。

どちらのソリューションでも、プログラムがリンクされるはずです。

于 2013-10-28T21:07:28.310 に答える