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]);
}
}
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.
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.
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
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.
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)