2016-04-07 11 views
0

Windows上でGLFWサンプルコードをコンパイルしようとしています。コマンドを入力すると:「WinMain @ 16」への未定義の参照minGW32-makeエラー

g++ main.cpp -Ideps/include/ -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32 

ストレート・イン・コマンド・プロンプトで完全にコンパイルされます。しかし、私はmakefileを使うことにしています。私がすると、次のような結果が得られます。

g++ -g -Wall -Ideps/include/ -c main.cpp 
g++ -Ldeps/lib/ -lglfw3_win32 -lopengl32 -lgdi32 -o main.o 
c:/mingw/bin/../lib/gcc/mingw32/4.9.3/../../../libmingw32.a(main.o):(.text.startup+0xa7): undefined reference to `[email protected]' 
collect2.exe: error: ld returned 1 exit status 
Makefile_WIN32:8: recipe for target 'test.exe' failed 
mingw32-make: *** [test.exe] Error 1 

私が使用しているメイクファイルは

PROG = test.exe 
CC = g++ 
CPPFLAGS = -g -Wall -Ideps/include/ 
LDFLAGS = -Ldeps/lib/ -lglfw3_win32 -lopengl32 -lgdi32 
OBJS = main.o 

$(PROG) : $(OBJS) 
    $(CC) $(LDFLAGS) -o $(OBJS) 

main.o : 
    $(CC) $(CPPFLAGS) -c main.cpp 

であると私は、コマンド

mingw32-make -f Makefile_WIN32 

でそれを呼び出すよ、私はメイクファイルに比較的新しいですので、私は何見当がつかない問題はあるので、どんな助けも大いに評価されるでしょう。私の唯一の推測は、それがソースコードではなく、g++コマンドを使用してコンパイルし、同様のメークファイルを使用している私のmac(したがって非標準のメークファイル名)でもコンパイルできることです。

+0

はあなたがから++グラムを防ぐために – OMGtechy

+0

使用-c 'WinMain'関数を定義する必要がありますリンカーを実行しようとしています。 –

答えて

0

なぜ-o $(OBJS)リンクするか?これは-o $(PROG) $(OBJS)にする必要があります。あなたは

編集...それを使用するのではなく、あなたのmain.oファイルを上書きしようとしている:メイクファイルであなたが-lglfw3_win32を使用しながら、メイクなしで構築する場合にも、同じコマンドを使用していない、あなたは-lglfw3を使用しています。

編集2(ビューコメント):時にはそれが、リンクターゲットの後にライブラリフラグを置くことが必要だ、これは与える:

$(CC)-o $(OBJS) $(LDFLAGS) 
+0

私は分かりません、私はそれを働かせようとしているものを変えていました。 しかし、あなたが提案したように私がそれを変更すると、私は新しいエラーを取得し、 'glfwInit'などの参照は未定義です。ええ、それはリンカのエラーですか? makeを使用しているときにGLFWライブラリファイルを見つけられないのはなぜですか? –

+0

@Kieran Crayn makeなしでビルドするときに同じコマンドを使用していない場合は、 '-lglfw3_win32'を使用するmakefile中で' -lglfw3'を使用します。 – jdarthenay

+0

GLFWライブラリの2つのインスタンスlibglfw3.aとlibglfw3_win32.aがあります。これは、問題がライブラリファイルに含まれているかどうか疑問に思っていたためです。コマンドラインでg ++を使って直接ビルドすると* .aでも動作しますが、いずれもMakefileで動作しません –

関連する問題