2016-04-08 2 views
1

問題はGLFWの例を構築することに関連しています。コマンドプロンプトで、1行(以下のように)を使ってプログラムをビルドしようとすると、動作します。MinGW32リンクエラー - 1つのコマンドでビルドしますが、Makefileを使用すると失敗します

g++ -g -Wall -Ideps/include/ main.cpp -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32 -o test.exe 

しかし、私は次のMakefileを使用してビルドしようとしています。

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

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

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

しかし、私はそうするとき、私は次のエラーに遭遇:

main.o: In function `main': 
C:\Users\Kieran\GLFWtest/main.cpp:9: undefined reference to `glfwSetErrorCallback' 
C:\Users\Kieran\GLFWtest/main.cpp:10: undefined reference to `glfwInit' 
C:\Users\Kieran\GLFWtest/main.cpp:12: undefined reference to `glfwCreateWindow' 
C:\Users\Kieran\GLFWtest/main.cpp:15: undefined reference to `glfwTerminate' 
C:\Users\Kieran\GLFWtest/main.cpp:18: undefined reference to `glfwMakeContextCurrent' 
C:\Users\Kieran\GLFWtest/main.cpp:19: undefined reference to `glfwSwapInterval' 
C:\Users\Kieran\GLFWtest/main.cpp:20: undefined reference to `glfwSetKeyCallback' 
C:\Users\Kieran\GLFWtest/main.cpp:25: undefined reference to `glfwGetFramebufferSize' 
C:\Users\Kieran\GLFWtest/main.cpp:27: undefined reference to `[email protected]' 
C:\Users\Kieran\GLFWtest/main.cpp:28: undefined reference to `[email protected]' 
C:\Users\Kieran\GLFWtest/main.cpp:29: undefined reference to `[email protected]' 
C:\Users\Kieran\GLFWtest/main.cpp:30: undefined reference to `[email protected]' 
C:\Users\Kieran\GLFWtest/main.cpp:31: undefined reference to `[email protected]' 
C:\Users\Kieran\GLFWtest/main.cpp:32: undefined reference to `[email protected]' 
C:\Users\Kieran\GLFWtest/main.cpp:33: undefined reference to `[email protected]' 

あり、いくつかのより多くのエラーがありますが、それらはちょうどより多く未定義の参照です。私は手動で次の2つのコマンドを呼び出すことによってMakefileを実行しようとしました.1つはコンパイルし、もう1つはリンクします。これは、罰金コンパイルしますが、リンク時に上記と同じエラーが発生します

g++ -g -Wall -Ideps/include/ -c main.cpp 
g++ -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32 -o test.exe main.o 

私は1行作品でそれを構築する理由として損失でんだけど、私は基本的であると考えているものを使用した場合、コンパイルして、リンクが失敗しました同じプロセス。私は比較的新しいMakefileを使用しているので、ルーキー・エラーを起こす可能性はありますが、私の検索では答えが出られません。また、私のMac上で問題なく同じようなMakefileを使ってビルドすることに気付きたいと思います。

ご協力いただきありがとうございます。

+0

表示される手動コマンドと、makefileが実行するコマンドには大きな違いがあります。コマンドラインでのライブラリの場所。 –

+0

'-o *'フラグの前に '.o'ファイルを置こうとしてください。このように: 'g ++ main.o -Ldeps/lib/-lglfw3 -lopengl32 -lgdi32 -o test.exe'。それに応じてmakefileを変更します。 – HolyBlackCat

+0

これはうまくいきました。問題のファイル(main.cpp、main.oなど)を指定してコマンドを注文した後で、その後にインクルードとライブラリのフラグを付けるのが最善でしょうか? –

答えて

1

.oファイルの前に、-l*フラグの前に入力してください。このよう

g++ main.o -Ldeps/lib/ -lglfw3 -lopengl32 -lgdi32 -o test.exe

と同じようにメイクファイルを変更します。

関連する問題