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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top