Linking Fehler in Sun Studio 10 unter Solaris
-
29-09-2019 - |
Frage
Ich schrieb ein Testprogramm wie folgt aus:
#include <sys/socket.h>
int main( void ) {
int sock = socket(AF_INET, SOCK_DGRAM, 0);
return 0;
}
Und versucht, es zu kompilieren:
$ /tool/sunstudio/bin/cc test.c
Undefined first referenced
symbol in file
socket test.o
ld: fatal: Symbol referencing errors. No output written to a.out
Der Ausgang ist "Symbol-Buchse ist nicht referenziert".
Bitte geben Sie mir die Richtung, so dass ich dieses Problem lösen kann.
Lösung
Hier ist die Frage.
Ich schrieb ein Testprogramm wie folgt aus:
#include <sys/socket.h>
int main( void ) {
int sock = socket(AF_INET, SOCK_DGRAM, 0);
return 0;
}
Und versuchte, es zu kompilieren so (dies ist der Ausgang ist das wirklich hilft, muss man, dass moderne Compiler erinnert wirklich ihr Bestes versuchen, um Ihnen zu helfen Probleme zu beheben):
$ /tool/sunstudio/bin/cc test.c
Undefined first referenced
symbol in file
socket test.o
ld: fatal: Symbol referencing errors. No output written to a.out
Nun, von dem Ausgang können wir sehen, dass das Symbol socket
nicht referenziert wird. Also, wenn Sie man socket
Typ erhalten Sie die folgende von der man-Seite bekommen:
SYNOPSIS
cc [ flag ... ] file ... -lsocket -lnsl [ library ... ]
Die -l
Flagge zeigt an, dass diese Funktion müssen Sie auch verwenden, um die benannte Bibliothek verknüpfen. In diesem Fall, dass Sie gesagt wird -lsocket -lnsl
zur cc
Kommandozeile hinzufügen wie folgt:
$ /tool/sunstudio/bin/cc test.c -lsocket -lnsl
Andere Tipps
Sie müssen Glied in der Socket-Bibliothek, in der Befehlszeile:
-lsocket
Sie müssen mindestens -lsocket
zu Ihrem Link-Schritt, das heißt Link gegen libsocket.so hinzuzufügen. Ich weiß nicht, wie das zu tun, in der SunStudio UI, obwohl - sind die Projekte auf der Grundlage Make-Datei
Der Mann Seite ist in der Regel ein guter Ort, um für die erforderlichen Bibliotheken; in diesem Fall wird der Manpage Buchse empfiehlt auch -lnsl
(die Synopsis sehen), so dass auch erforderlich sein könnte, aber ich erinnere mich nicht, dass es notwendig ist.