問題は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を使ってビルドすることに気付きたいと思います。
ご協力いただきありがとうございます。
表示される手動コマンドと、makefileが実行するコマンドには大きな違いがあります。コマンドラインでのライブラリの場所。 –
'-o *'フラグの前に '.o'ファイルを置こうとしてください。このように: 'g ++ main.o -Ldeps/lib/-lglfw3 -lopengl32 -lgdi32 -o test.exe'。それに応じてmakefileを変更します。 – HolyBlackCat
これはうまくいきました。問題のファイル(main.cpp、main.oなど)を指定してコマンドを注文した後で、その後にインクルードとライブラリのフラグを付けるのが最善でしょうか? –