Unix-Center.Net
»
C/C++
» 请教:我的Socket程序在unix-center上编译不通过?
2008-9-30 10:05
yaoike
请教:我的Socket程序在unix-center上编译不通过?
程序如下:
client1.c
/* Make the necessary includes and set up the variables.
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>
#include <string.h>
int main()
{
int sockfd;
int len;
struct sockaddr_un address;
int result;
char ch = 'A';
/* Create a socket for the client. */
sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
/* Name the socket, as agreed with the server. */
address.sun_family = AF_UNIX;
strcpy(address.sun_path, "server_socket");
len = sizeof(address);
/* Now connect our socket to the server's socket. */
result = connect(sockfd, (struct sockaddr *)&address,
len);
if(result == -1) {
perror("oops: client1");
//exit(1);
}
/* We can now read/write via sockfd. */
write(sockfd, &ch, 1);
read(sockfd, &ch, 1);
printf("char from server = %c/n", ch);
close(sockfd);
//exit(0);
return 0;
}
后我用论坛上教的方法编译:
gcc -Wall client1.c -o client1
结果出来这样的错误提示:
-bash-3.00$ gcc -Wall client1.c -o client1
Undefined first referenced
symbol in file
socket /var/tmp//cc2yTgiY.o
connect /var/tmp//cc2yTgiY.o
ld: fatal: Symbol referencing errors. No output written to client1
collect2: ld returned 1 exit status
我上google,baidu都查不到这种错误的原因,我估计是不是因为找不到sys/socket.h这个文件导致的错误,呵呵,请教高手解答,多谢多谢!
程序如下:
client1.c
/* Make the necessary includes and set up the variables.
*/
#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <sys/un.h>
#include <unistd.h>
#include <string.h>
int main()
{
int sockfd;
int len;
struct sockaddr_un address;
int result;
char ch = 'A';
/* Create a socket for the client. */
sockfd = socket(AF_UNIX, SOCK_STREAM, 0);
/* Name the socket, as agreed with the server. */
address.sun_family = AF_UNIX;
strcpy(address.sun_path, "server_socket");
len = sizeof(address);
/* Now connect our socket to the server's socket. */
result = connect(sockfd, (struct sockaddr *)&address,
len);
if(result == -1) {
perror("oops: client1");
//exit(1);
}
/* We can now read/write via sockfd. */
write(sockfd, &ch, 1);
read(sockfd, &ch, 1);
printf("char from server = %c/n", ch);
close(sockfd);
//exit(0);
return 0;
}
后我用论坛上教的方法编译:
gcc -Wall client1.c -o client1
结果出来这样的错误提示:
-bash-3.00$ gcc -Wall client1.c -o client1
Undefined first referenced
symbol in file
socket /var/tmp//cc2yTgiY.o
connect /var/tmp//cc2yTgiY.o
ld: fatal: Symbol referencing errors. No output written to client1
collect2: ld returned 1 exit status
我上google,baidu都查不到这种错误的原因,我估计是不是因为找不到sys/socket.h这个文件导致的错误,呵呵,请教高手解答,多谢多谢!
2008-10-6 15:22
yindajun
我在unix-center上编译就是好好的。:L
2008-10-6 16:19
yaoike
我又试了一遍,还是不可以,你可以用这个用户名: yaoike2 密码: yaoike 帮我看一下究竟是哪里不对吗?多谢!!!
2008-10-6 16:40
seer671
回复 #1 yaoike 的帖子
注意看下出错信息。
是链接时,没有找到相应的函数。
用这个试一试gcc -Wall client1.c -o client1 -lsocket -lnsl
[[i] 本帖最后由 seer671 于 2008-10-6 16:45 编辑 [/i]]
注意看下出错信息。
是链接时,没有找到相应的函数。
用这个试一试gcc -Wall client1.c -o client1 -lsocket -lnsl
[[i] 本帖最后由 seer671 于 2008-10-6 16:45 编辑 [/i]]
2008-10-6 16:56
yindajun
楼上的正解。 我是在fedora下,你是在solaris下编译出的问题。:lol
在linux下,libc已经包含了socket函数。但在solaris下,就放在了libsocket库下了。
所以你要给出需要的库的名字。
[[i] 本帖最后由 yindajun 于 2008-10-6 17:00 编辑 [/i]]
在linux下,libc已经包含了socket函数。但在solaris下,就放在了libsocket库下了。
所以你要给出需要的库的名字。
[[i] 本帖最后由 yindajun 于 2008-10-6 17:00 编辑 [/i]]
2008-10-6 17:19
yaoike
多谢你的帮助,问题解决了.多谢~~~
2008-10-11 07:22
yaoike
抱歉,我是新手,可以再追问一下吗?您是根据什么知道socket套接字在solaris下,是放在libsocket库下的呢?还有,您是根据什么知道缺少libsocket库就要加 -lsocket 这个参数,我的意思是我想了解清楚怎么知道所缺的库文件来写上gcc对应的参数? 多谢~~~~~~
2008-10-12 16:34
seer671
回复 #7 yaoike 的帖子
man connect
man connect
2008-10-13 21:07
yaoike
哦,非常感谢,了解到了.
页: [1]
查看完整版本:
请教:我的Socket程序在unix-center上编译不通过?
Powered by Discuz! Archiver 5.5.0 © 2001-2006 Comsenz Inc.