2009-06-22 2 views
0

ich mit gcc kompiliertgcc Link Fehler aufgetreten

gcc -l. 'Net-snmp-config --cflags' -fPlC -shared -c -o matsu_object.o tsu_object.c

aber dieser Fehler aufgetreten

gcc: -lcrypto: Weil ein Link war nicht abgeschlossen ist, wurde die Eingabedatei des Linker nicht

verwendet Was ist los?

+0

net-snmp-config druckt '-lcrypto' und GCC warnt Sie, dass es die Bibliothek nicht benutzt hat, weil es keine Verbindung hergestellt hat. –

+0

--cflags druckt nicht -lcrypto, Sie brauchen --libs oder ähnliches dafür. – ephemient

Antwort

1

Ich denke, Sie verwenden Ticks "anstelle von Back Ticks". Gibt es bei --cflags wirklich Linker-Optionen? Ich denke du bist hier auf der Link-Stufe. Was ist der Effekt von -c bei einer Verbindung? Ich dachte -c wurde nur kompiliert und nicht versucht zu verknüpfen.

+0

Danke, ich habe das -c beim ersten Mal vermisst, als ich die Frage gelesen habe. Es schaltet den Compiler in den Nur-Kompilieren-Modus um (daher wird keine Verbindung hergestellt). 'net-snmp-config --cflags' gibt keine Linker-Optionen, daher kann die Befehlszeile in der Frage (selbst die Korrektur für s/'/'/g) immer noch nicht diese Ausgabe erzeugen. – ephemient

3

Haben Sie die Frage falsch eingegeben? Es gibt keine Möglichkeit für die zur Ausgabe der Nachricht, die Sie schreiben, und ich würde erwarten, dass der richtige Befehl etwas mehr wie

 
gcc -L. `net-snmp-config --cflags` -fPIC -shared -c -o matsu_object.o tsu_object.c 

Beachten Sie die -L Groß, Backticks anstelle von einfachen Anführungszeichen und Groß I in PIC ist.

Auch Sie nicht sagen, was Sie zu tun versuchen, aber net-snmp-config sollte auch als auch mindestens eine der --libs oder --agent-libs nehmen.


Ah, ich habe nicht genau genug gelesen ...

-c bedeutet "zusammenstellen", das heißt: erzeugen aus tsu_object.c, ein matsu_object.o zusammengestellt.

Ohne -c, der Compiler tatsächlich verknüpft, das heißt: generieren von *.o, a.out oder andere angegebene Datei.

-shared (und Linker-Flags wie -l und -L) sind nur bei der Verknüpfung sinnvoll. Sie sind bedeutungslos beim Kompilieren, wie Sie hier wegen -c tun.

Bitte korrigieren Sie die Befehlszeile in der Frage, um genau zu zeigen, was Sie gerade tun, und erläutern Sie, was Sie zu tun versuchen.

-1

Sie haben einfache Anführungszeichen statt Backquotes verwendet.

Statt dessen:

gcc -l. 'net-snmp-config --cflags' -fPlC -shared -c -o matsu_object.o tsu_object.c 

sollten Sie geben ein:

gcc -l. `net-snmp-config --cflags`-fPlC -shared -c -o matsu_object.o tsu_object.c 

net-snmp-config ein Programm ist. Wenn Sie es mit --cflags ausführen, werden die korrekten cflags ausgewertet, die Sie zum Kompilieren Ihres Programms verwenden sollten.

Aber Sie wissen was? Sie sollten autoconf verwenden.Selbst für so etwas Kleines macht es normalerweise Sinn, die Arbeit zu machen. Die meisten Leute, die ich kenne, müssen auf mehr als einer Plattform kompilieren ...