Lier erreur Sun Studio 10 sous Solaris
-
29-09-2019 - |
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.
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.