Question

J'ai écrit un programme de test comme ceci:

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

Et a essayé de le compiler:

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

La sortie est « prise de symbole n'est pas référencé ».

bien vouloir me donner la direction pour que je puisse résoudre ce problème.

Était-ce utile?

La solution

Voici la question.

J'ai écrit un programme de test comme ceci:

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

Et a essayé de le compiler si (ce qui est la sortie qui aide vraiment, il faut se rappeler que les compilateurs modernes vraiment essayer de leur mieux pour vous aider à résoudre les problèmes):

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

Maintenant, à partir de la sortie, nous pouvons voir non référencé le symbole socket. Donc, si vous tapez man socket vous obtiendrez ce qui suit de la page de manuel:

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

Le drapeau de -l indique que pour utiliser cette fonction vous devez également associer la bibliothèque nommée. Dans ce cas, on vous dit d'ajouter -lsocket -lnsl à la ligne de commande cc comme suit:

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

Autres conseils

vous devez lien dans la bibliothèque de prise, dans la ligne de commande:

-lsocket 

Vous devez ajouter au moins -lsocket à votre lien étape, à savoir le lien contre libsocket.so. Je ne sais pas comment faire dans l'interface utilisateur SunStudio, bien que - sont ses projets Makefile

?

La page de manuel est généralement un bon endroit pour chercher des bibliothèques nécessaires; dans ce cas, la page de manuel recommande également -lnsl (voir le résumé) afin que pourrait être nécessaire aussi, mais je ne me souviens pas qu'il soit nécessaire.

scroll top