2017-10-27 4 views
0

Ich habe einen Fehler kompilieren beim Versuch, eine Bibliothek zu verknüpfen. Hier ist der Fehler zusammen mit meinen KompilierungsbefehlenGCC-Linking-Bibliothek mit -l und -L

gcc snw-server.c -Wall -g -L\ -lpacketErrorSend -o snw-server 
/tmp/cc7dekxv.o: In function `main': 
/home/mike/CSCI446/project3/snw-server.c:113: undefined reference to `packetErrorSend' 
collect2: error: ld returned 1 exit status 
Makefile:5: recipe for target 'file' failed 
make: *** [file] Error 1 

Ich war anfangs etwas verwirrt über den Befehl -L. Die Bibliotheksdatei befindet sich im aktuellen Verzeichnis, in dem sich alle anderen Dateien befinden. Hier sind die Dateien in meinem Verzeichnis.

libpacketErrorSend.a Makefile packetErrorSend.h snw-client.c snw-server.c 

und hier ist das, was mein Makefile

file: snw-server.c snw-client.c 
     gcc snw-server.c -Wall -g -L\ -lpacketErrorSend -o snw-server 
     gcc snw-client.c -Wall -g -L\ -lpacketErrorSend -o snw-client 


    clean: 
     rm -f snw-server snw-client 

mir sicher, dass ich eingeschlossen packetErrorSend.h in den .c-Dateien wie

aussieht. Ich bin mir nicht sicher, ob ich die Bibliothek richtig verlinkt habe.

Die Funktion packetErrorSend wurde von unserem Kursleiter so erstellt, dass sie dieselben Argumente wie send (2) (Netzwerk) verwendet, aber Pakete verloren. Er funktioniert mit send, kompiliert jedoch nicht, wenn versucht wird, die Bibliothek zu verknüpfen und die Funktion in packetErrorSend zu ändern.

Danke, Mike

+1

'-L \ -lpacketErrorSend' ??? => '-L. -lpacketErrorSend' – Stargateur

+1

Das aktuelle Verzeichnis ist nicht mit "\" gekennzeichnet, es ist "." – Scooter

Antwort

3

Der \ Charakter exscapes den folgenden Raum verursacht es nicht als Option Separator von der Schale zu behandeln. So endet -L\ -lpacketErrorSend als ein einzelnes Argument und teilt dem Linker mit, in "-lpacketErrorSend" für Bibliotheksdateien zu suchen. Da dieses Verzeichnis nicht existiert, tut es effektiv nichts. Da Sie keine -l Optionen haben, sind keine Bibliotheken verknüpft.

Was möchten Sie wahrscheinlich ist

gcc snw-server.c -Wall -g -L. -lpacketErrorSend -o snw-server 

Mit . den Linker in . suchen erzählt - das aktuelle Verzeichnis.

+0

ah ha, ok vielen Dank – Mike1982