La vinculación de error en Sun Studio 10 bajo Solaris
-
29-09-2019 - |
Pregunta
Me escribió un programa de prueba como esta:
#include <sys/socket.h>
int main( void ) {
int sock = socket(AF_INET, SOCK_DGRAM, 0);
return 0;
}
Y trató de compilar:
$ /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 salida es "socket símbolo no se hace referencia a".
Por favor, dame la dirección para que pueda resolver este problema.
Solución
Esta es la pregunta.
Me escribió un programa de prueba como esta:
#include <sys/socket.h>
int main( void ) {
int sock = socket(AF_INET, SOCK_DGRAM, 0);
return 0;
}
Y trató de compilar lo que (esta es la salida que realmente ayuda, hay que recordar que los compiladores modernos realmente todo lo posible para ayudar a solucionar cualquier problema):
$ /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
Ahora, desde la salida podemos ver que el símbolo socket
no se hace referencia. Así que si escribe man socket
obtendrá lo siguiente desde la página del manual:
SYNOPSIS
cc [ flag ... ] file ... -lsocket -lnsl [ library ... ]
La bandera -l
indica que para utilizar esta función es necesario enlazar también la biblioteca llamada. En este caso se le ha dicho para añadir -lsocket -lnsl
a la línea de comandos cc
de la siguiente manera:
$ /tool/sunstudio/bin/cc test.c -lsocket -lnsl
Otros consejos
tiene que eslabón de la biblioteca de sockets, en la línea de comandos:
-lsocket
Es necesario añadir al menos -lsocket
a su enlace a paso, es decir, en contra de enlace libsocket.so. No sé cómo hacer eso en el SunStudio interfaz de usuario, sin embargo - son sus proyectos basados ??Makefile
La página del manual es por lo general un buen lugar para buscar bibliotecas necesarias; en este caso, la página del manual para el zócalo href="http://docs.oracle.com/cd/E23823_01/html/816-5170/socket-3socket.html#scrolltoc" rel="nofollow"> también recomienda -lnsl
(véase la sinopsis) de manera que pudieran requerirse también, pero no me acuerdo que sea necesario.