Il collegamento di errore in Sun Studio 10 in Solaris
-
29-09-2019 - |
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.
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.