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.
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. –
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
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? –