"Symbol referencing errors" On Socket programming


 
Thread Tools Search this Thread
Top Forums Programming "Symbol referencing errors" On Socket programming
# 1  
Old 06-01-2011
"Symbol referencing errors" On Socket programming

Dear all,

I had the "Symbol referencing errors" while compiling a C socket code.
It said "Undefined Symbol: socketpair", but I already copy the two head files (#include "types.h", #include "socket.h") into my current directory.

Could anyone help me with it? Thanks.

By the way, I'm using Solaris, OS version is 5.10.
GCC version is 3.4.6.(is it because the GCC version is old?)
The tut2.c code I was using is from the following link:
A Socket-based IPC Tutorial

I'll copy the source code here:
Code:
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h> 
#include <unistd.h>
#include <stdlib.h>

#define DATA1 "In Xanadu, did Kublai Khan..." 
#define DATA2 "A stately pleasure dome decree..."

/*
 * This program creates a pair of connected sockets, 
 * then forks and communicates over them. While this
 * is very similar to communication with pipes, socketpairs
 * are two-way communications objects. Therefore, I can
 * send messages in both directions.
 */

main()
{
        int sockets[2], child;
        char buf[1024];

        if (socketpair(AF_UNIX, SOCK_STREAM, 0, sockets) < 0) {
                perror("opening stream socket pair");
                exit(1);
        }

        if ((child = fork()) == -1)
                perror("fork");
        else if (child) {       /* This is the parent. */
                close(sockets[0]);
                if (read(sockets[1], buf, sizeof(buf)) < 0)
                        perror("reading stream message");
                printf("-->%s\n", buf);
                if (write(sockets[1], DATA2, sizeof(DATA2)) < 0)
                        perror("writing stream message");
                close(sockets[1]);
        } else {                /* This is the child. */
                close(sockets[1]);
                if (write(sockets[0], DATA1, sizeof(DATA1)) < 0)
                        perror("writing stream message");
                if (read(sockets[0], buf, sizeof(buf)) < 0) 
                        perror("reading stream message");
                printf("-->%s\n", buf);
                close(sockets[0]);
        }
}

# 2  
Old 06-01-2011
Remember that #include files only declare that the symbols exist -- they don't actually import them. "undeclared", a compilation error, is a totally different error than "undefined", a linking error.

Solaris apparently needs -lsocket and -lnsl. Slightly unusual.
This User Gave Thanks to Corona688 For This Post:
# 3  
Old 06-01-2011
Thank you Corona and nice to see you again!

Seems that I need do some homework, since I know nothing about -lsocket and -lnsl.



Quote:
Originally Posted by Corona688
Remember that #include files only declare that the symbols exist -- they don't actually import them. "undeclared", a compilation error, is a totally different error than "undefined", a linking error.

Solaris apparently needs -lsocket and -lnsl. Slightly unusual.
# 4  
Old 06-01-2011
Solaris man pages tend to be a lot more complete than Linux man pages. Note the required libraries are actually listed on the man page for library calls:

Code:
Sockets Library Functions                     socketpair(3SOCKET)

NAME
     socketpair - create a pair of connected sockets

SYNOPSIS
     cc [ flag ... ] file ... -lsocket  -lnsl  [ library ... ]
     #include <sys/types.h>
     #include <sys/socket.h>

     int socketpair(int domain, int type, int protocol, int sv[2]);

DESCRIPTION
     The socketpair() library call creates  an  unnamed  pair  of
     connected sockets in the specified address family domain, of
     the specified type, that uses the optionally specified  pro-
     tocol.  The descriptors that are used in referencing the new
     sockets are returned in sv[0] and sv[1]. The two sockets are
     indistinguishable.

RETURN VALUES
     socketpair() returns -1 on failure and 0 on success.

ERRORS
     The call succeeds unless:

     EAFNOSUPPORT       The specified address family is not  sup-
                        ported on this machine.

     EMFILE             Too many descriptors are in use  by  this
                        process.

     ENOMEM             There was insufficient  user  memory  for
                        the operation to complete.

     ENOSR              There were insufficient STREAMS resources
                        for the operation to complete.

     EOPNOTSUPP         The specified protocol does  not  support
                        creation of socket pairs.

     EPROTONOSUPPORT    The specified protocol is  not  supported
                        on this machine.

     EACCES             The process  does  not  have  appropriate
                        privileges.

SunOS 5.11          Last change: 10 Jan 2001                    1

Sockets Library Functions                     socketpair(3SOCKET)

ATTRIBUTES
     See attributes(5) for descriptions of the  following  attri-
     butes:

     ____________________________________________________________
    |       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
    |_____________________________|_____________________________|
    | MT-Level                    | Safe                        |
    |_____________________________|_____________________________|

SEE ALSO
     pipe(2), read(2), write(2), socket.h(3HEAD), attributes(5)

NOTES
     This call is currently  implemented  only  for  the  AF_UNIX
     address family.

SunOS 5.11          Last change: 10 Jan 2001                    2

This User Gave Thanks to achenle For This Post:
# 5  
Old 06-06-2011
Quote:
Originally Posted by achenle
Solaris man pages tend to be a lot more complete than Linux man pages. Note the required libraries are actually listed on the man page for library calls:
I've frequently seen libraries listed in linux man pages as well. Admittedly not always.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

How to allign output data in UNIX that is separated with a pipe "|" symbol ?

Experts , In the given output of the log file, the 2nd field that is separated by "|" pipe is not aligned well due to the uneven data length, I would like it to align the 2nd column with 37 length (that is disturbed in the output) including the pipe . The two pepe "|" would be in a aligned way... (2 Replies)
Discussion started by: rveri
2 Replies

2. Programming

Symbol referencing errors

Undefined first referenced symbol in file logf /var/tmp//ccwztFsO.o ld: fatal: Symbol referencing errors. No output written to a.out collect2: ld returned 1 exit status float exponC(float mean) { index1++;... (1 Reply)
Discussion started by: willji1234
1 Replies

3. Shell Programming and Scripting

awk command to replace ";" with "|" and ""|" at diferent places in line of file

Hi, I have line in input file as below: 3G_CENTRAL;INDONESIA_(M)_TELKOMSEL;SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL My expected output for line in the file must be : "1-Radon1-cMOC_deg"|"LDIndex"|"3G_CENTRAL|INDONESIA_(M)_TELKOMSEL"|LAST|"SPECIAL_WORLD_GRP_7_FA_2_TELKOMSEL" Can someone... (7 Replies)
Discussion started by: shis100
7 Replies

4. Programming

C++ ld: fatal: Symbol referencing errors.

Hello. I used to compile my code including a third-party library, "libfoo.so". Now, the vendor ships a statically linked library, "libfoo.a", instead. With this library, I run into the following error: CC -mt -xarch=v9 -DCOMPILE_SOL_SPARC -ftrap=%none -xlibmil -xchip=ultra2 -xbuiltin -xO4 \... (0 Replies)
Discussion started by: acheong87
0 Replies

5. Programming

ld: fatal: Symbol referencing errors

Hi, I'm trying to compile OpenTTD on Solaris 5.10. I do not have root permissions so I have to set the prefix-dir to /home/abcde/usr/local/opt/opentdd-0.6.3 I've used the following command to configure: bash ./configure --prefix-dir=/opt/openttd-0.6.2 --without-makedepend \... (1 Reply)
Discussion started by: rudolph
1 Replies

6. AIX

"too big" and "not enough memory" errors in shell script

Hi, This is odd, however here goes. There are several shell scripts that run in our production environment AIX 595 LPAR m/c, which has sufficient memory 14GB (physical memory) and horsepower 5CPUs. However from time to time we get the following errors in these shell scripts. The time when these... (11 Replies)
Discussion started by: jerardfjay
11 Replies

7. Shell Programming and Scripting

ld: fatal: Symbol referencing errors

I am getting below error, any ideas to resolve it. 1:ts_n_tcp_cmp_row /finder3/baseline/95s/ed/src/lib/libfinder_ui_basic.so 1:ui_convert_date /finder3/baseline/95s/ed/src/lib/libfinder_fi_basic.so 1:ld: fatal: Symbol referencing errors. No output written... (1 Reply)
Discussion started by: shafi2all
1 Replies

8. Programming

ld: fatal: Symbol referencing errors. No output written to SNX

Hi all, I am getting the following error when I try to do a build of a product. I dont have the dependencies of the binaries involved in the build and thats the reason I was not able to find which library to add or to proceed to the next step to solve the reference problem. Undefined ... (1 Reply)
Discussion started by: jerryragland
1 Replies

9. UNIX for Dummies Questions & Answers

ld: fatal: Symbol referencing errors

Hello! I have some problems installing a program called “Jail Chroot Project”. http://www.gsyc.inf.uc3m.es/~assman/jail/index.html I have only installed precompiled programs before and I get some kind of error message when im trying to compile this program. I have downloaded and... (2 Replies)
Discussion started by: alfabetman
2 Replies

10. Programming

Compiling Errors -- Symbol referencing

I'm trying to compile a FTP_API program. To do this you must use the libftp.so libary. But that libary has references which are not defined. Has anyone had this problems and how is it corrected?? The command line looks like this:-------------------------------------------- # cc ftpstock.c -lftp... (5 Replies)
Discussion started by: spotanddot
5 Replies
Login or Register to Ask a Question