2016-06-18 10 views
1

Ich benutze Makefile, um meine einfache Anwendung zu kompilieren. Hier ist es:Linke statische Bibliothek mit gnu g ++: Keine solche Datei oder Verzeichnis, Makefile

Allerdings scheint es, dass ich ein Problem mit der Verknüpfung statischer Bibliothek habe. Das ist mein Ausgang nach der Ausführung make all:

$ make all 
g++ -Wall -c main.cpp 
g++ -Wall -c section.cpp 
g++ -Wall -c circle.cpp 
g++ -Wall -c triangle.cpp 
g++ -Wall -c rectangle.cpp 
ar rv libfigures.a section.o triangle.o rectangle.o circle.o 
ar: creating libfigures.a 
a - section.o 
a - triangle.o 
a - rectangle.o 
a - circle.o 
g++ -o main.x -Wall main.o section.o circle.o triangle.o rectangle.o libfigures.a main.x main.o section.o circle.o triangle.o rectangle.o 
g++: error: main.x: No such file or directory 1 
make: *** [main.x] Error 1 

Irgendwelche Ideen, was soll ich mit dieser Make-Datei falsch?

+0

'g ++ -o main.x ... main.x ...' sieht seltsam . main.x kommt auf main.x an, was offensichtlich nicht existiert ... –

Antwort

1

Ihr letzter Befehl ist

g++ -o main.x -Wall main.o section.o circle.o triangle.o rectangle.o \ 
     libfigures.a main.x main.o section.o circle.o triangle.o \ 
     rectangle.o 

Auch dort ist viel los hier: Sie (1) wiederholen jeweils zweimal Objekt (2) verwenden, um beiden Objekte und eine Bibliothek von ihnen gebaut (3), um die Ausgabedatei verwendet in die Liste der Eingabedateien.

sollte es sein

g++ -o main.x main.o libfigures.a 

Sie wahrscheinlich die Make-Datei Regel wie diese ändern müssen:

$(MAINEXE): $(MAINKOM) $(BIBSTAT) 
    $(LINKER) -o [email protected] $^ 
+0

Vielen Dank, ich konnte es irgendwie nicht finden. Jetzt funktioniert es! :) – yak