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.

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top