Domanda

ho scritto un programma di test in questo modo:

#include <sys/socket.h>
int main( void ) {
    int  sock = socket(AF_INET, SOCK_DGRAM, 0);
    return 0;
}

E ha provato a compilarlo:

$ /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

L'uscita è "presa simbolo non viene fatto riferimento".

Si prega di darmi la direzione in modo che possa risolvere questo.

È stato utile?

Soluzione

Ecco la domanda.

ho scritto un programma di test in questo modo:

#include <sys/socket.h>
int main( void ) {
    int  sock = socket(AF_INET, SOCK_DGRAM, 0);
    return 0;
}

E ha cercato di compilarlo in modo (questo è l'output che realmente aiuta, si deve ricordare che i compilatori moderni davvero del loro meglio per aiutare a risolvere eventuali problemi):

$ /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

Ora, dall'uscita possiamo vedere che la socket simbolo non viene fatto riferimento. Quindi, se si digita man socket si otterrà la seguente dalla pagina man:

SYNOPSIS
     cc [ flag ... ] file ... -lsocket  -lnsl  [ library ... ]

Il flag -l indica che per utilizzare questa funzione è necessario collegare anche la libreria denominata. In questo caso si viene detto di aggiungere -lsocket -lnsl alla riga di comando cc come segue:

$ /tool/sunstudio/bin/cc test.c -lsocket -lnsl

Altri suggerimenti

è necessario anello della libreria socket, nella riga di comando:

-lsocket 

È necessario aggiungere almeno -lsocket al tuo link-step, cioè Link contro libsocket.so. Non so come fare in Studio Sole interfaccia utente, anche se - sono i suoi progetti Makefile basato

?

La pagina man di solito è un buon posto per cercare librerie richieste; in questo caso il per lo zoccolo raccomanda anche -lnsl (vedi la sinossi) in modo che potrebbe essere necessaria anche, ma non ricordo che sia necessario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top