2016-04-08 18 views
1

Das Problem, das ich habe, bezieht sich auf das Erstellen eines GLFW-Beispiels. In Command Prompt, wenn ich versuche, das Programm mit einer Zeile (wie unten) zu bauen, dann funktioniert es.MinGW32 Verbindungsfehler - baut in einem Befehl auf, schlägt aber fehl Makefile zu verwenden

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

Allerdings bin ich verpflichtet, es mit dem folgenden Makefile zu bauen.

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 

Aber wenn ich so tun, ich laufe in die folgenden Fehler:

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]' 

Es gibt ein paar mehr Fehler, aber sie sind nur mehr undefinierte Referenzen. Ich habe versucht, das Makefile auszuführen, indem ich die folgenden zwei Befehle manuell aufruft, eine Kompilierung und eine Verknüpfung. Es kompiliert gut, aber gibt die gleichen Fehler wie oben bei der Verknüpfung,

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

ich ratlos bin, warum es in einer Zeile Aufbau funktioniert, aber kompilieren und dann versagt die Verknüpfung bei der Verwendung, was ich glaube, im Wesentlichen ist der gleiche Prozess. Ich bin relativ neu bei Makefiles, daher ist es möglich, dass ich einen Anfängerfehler mache, aber meine Suche hat keine Antworten hervorgebracht. Ich möchte auch erwähnen, dass das Erstellen eines ähnlichen Makefile auf meinem Mac ohne Probleme.

Jede Hilfe würde sehr geschätzt werden, danke.

+0

Es gibt einen großen Unterschied zwischen dem angezeigten manuellen Befehl und dem Befehl, den das Makefile ausführt: Der Speicherort der Bibliotheken in der Befehlszeile. –

+0

Versuchen Sie, '.o' Dateien vor' -l * 'Flags zu setzen. Wie folgt: 'g ++ main.o -Ldeps/lib/-lglfw3 -lopengl32 -lgdi32 -o test.exe'. Und modifiziere Makefile entsprechend. – HolyBlackCat

+0

Okay danke, das hat funktioniert. Ist es am besten, den Befehl zuerst mit der fraglichen Datei (d. H. Main.cpp oder main.o) zu bestellen, und anschließend mit den Flags include und library? –

Antwort

1

Versuchen Sie, .o Dateien vor-l* Flags zu setzen.

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

Und Make-Datei in der gleichen Weise verändern.