我在linux下编译的程序拿到unix下出错。怎么该?

acqy 2003-10-09 08:59:11
我在linux下编写了一个socket程序,在linux下编译正常:
gcc svr.c
但是我拿到unix下编译就有问题:
gcc svr.c
/usr/include/sys/socket.h:484: parse error before "sendfile"
/usr/include/sys/socket.h:485: parse error before "bsize_t"
/usr/include/sys/socket.h:486: parse error before "sendpath"
/usr/include/sys/socket.h:487: parse error before "bsize_t"
怎么办?
...全文
60 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
fierygnu 2003-11-13
  • 打赏
  • 举报
回复
真的?环境有问题。
acqy 2003-11-13
  • 打赏
  • 举报
回复

我知道为什么了:
gcc -I/usr/include test.c
acqy 2003-10-20
  • 打赏
  • 举报
回复
呵呵。各位的方法我都使用过了,没辙啊。
fxiangh 2003-10-17
  • 打赏
  • 举报
回复
除非其中有不可见字符,程序应无问题
fierygnu 2003-10-16
  • 打赏
  • 举报
回复
g++ -E urfile.CC
看看输出结果是怎么回事
acqy 2003-10-16
  • 打赏
  • 举报
回复
没有用啊。
mmxcraft 2003-10-16
  • 打赏
  • 举报
回复
在Hp/solaris上用cc编译,都没有问题。

cc xxx.c

fierygnu 2003-10-15
  • 打赏
  • 举报
回复
在文件第一行加上#include <sys/types.h>试试。
acqy 2003-10-14
  • 打赏
  • 举报
回复
Linux下没有发现这条命令啊。
webwebweb 2003-10-13
  • 打赏
  • 举报
回复
如果在编译的时候出错, 那么需要检察相关的函数声明. 是否在头文件中已经有了.

还有一个重要的问题; 在Unix中(不是Linux)编译文件, 需要确保该文件是Unix文件格式.

否则会出线莫名奇妙的错误. 可以在Linux中用dos2unix命令把文件转化成Unix格式.

转化了之后在编译试试.

acqy 2003-10-13
  • 打赏
  • 举报
回复
没有用啊
xupingle 2003-10-10
  • 打赏
  • 举报
回复
在编译时加上参数-lsocket试试
acqy 2003-10-09
  • 打赏
  • 举报
回复
也没有用啊。郁闷啊。
blh 2003-10-09
  • 打赏
  • 举报
回复
加个-lsocket实施
acqy 2003-10-09
  • 打赏
  • 举报
回复
如下程序:
#include <sys/socket.h>

int main ()
{
}

编译后就出错:
/usr/include/sys/socket.h:484: parse error before "sendfile"
/usr/include/sys/socket.h:485: parse error before "bsize_t"
/usr/include/sys/socket.h:486: parse error before "sendpath"
/usr/include/sys/socket.h:487: parse error before "bsize_t"

我的系统是hpunix11的服务器。
jlover 2003-10-09
  • 打赏
  • 举报
回复
用Makefile
一个例子

//--------------------------------
DEFINES= -D__SOLARIS__ -Dunix

INCLUDES= -I. -I$(ORACLE_HOME)/precomp/public -I$(ORACLE_HOME)/rdbms/demo -I$(ORACLE_HOME)/rdbms/public
ORAINCLUDES= include=. include=/usr/include include=/usr/local/include/g++-3/ include=/usr/local/include/ include=/usr/local/sparc-sun-solaris2.8/include/ include=/usr/local/lib/gcc-lib/sparc-sun-solaris2.8/2.95.3/include/
LIBS= -L$(ORACLE_HOME)/lib -lsocket -lnsl -lclntsh -lpthread
CFLAGS= ${DEFINES} ${INCLUDES}
CC=g++

alL:importbil

bilpro.o : bilpro.cpp
${CC} -c ${CFLAGS} bilpro.cpp


cdb.o : cdb.cpp
${CC} -c ${CFLAGS} cdb.cpp


inifile.o : inifile.cpp
${CC} -c ${CFLAGS} inifile.cpp

importbil:bilpro.o cdb.o inifile.o
${CC} -o importbil cdb.o bilpro.o inifile.o ${LIBS}

clean:
rm -f *.o core
acqy 2003-10-09
  • 打赏
  • 举报
回复
我的程序代码如下:
#include <stdio.h>
#include <sys/param.h>
#include <sys/socket.h>
#include <unistd.h>
#include <stdlib.h>
#include <errno.h>
#include <netinet/in.h>

int daemon_init()
{
pid_t pid;
int i;
if (pid=fork())
exit(0);
else if (pid<0)
exit(1);
setsid();
if (pid=fork())
exit(0);
else if (pid<0)
exit(1);
for (i=0;i<NOFILE;i++)
close (i);
chdir ("/tmp");
umask (0);
return 0;
}

int main(int argc, char *argv[])
{
int sockfd,new_fd;
struct sockaddr_in server_addr;
struct sockaddr_in client_addr;
int sin_size,portnumber;
char hello[]="Hello! Are You Fine?\n";
if(argc!=2)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}
daemon_init();
if((portnumber=atoi(argv[1]))<0)
{
fprintf(stderr,"Usage:%s portnumber\a\n",argv[0]);
exit(1);
}

if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
fprintf(stderr,"Socket error:%s\n\a",strerror(errno));
exit(1);
}

bzero(&server_addr,sizeof(struct sockaddr_in));
server_addr.sin_family=AF_INET;
server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
server_addr.sin_port=htons(portnumber);

if(bind(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
{
fprintf(stderr,"Bind error:%s\n\a",strerror(errno));
exit(1);
}

if(listen(sockfd,5)==-1)
{
fprintf(stderr,"Listen error:%s\n\a",strerror(errno));
exit(1);
}

while(1)
{
sin_size=sizeof(struct sockaddr_in);
if((new_fd=accept(sockfd,(struct sockaddr *)(&client_addr),&sin_size))==-1)
{
fprintf(stderr,"Accept error:%s\n\a",strerror(errno));
exit(1);
}

fprintf(stderr,"Server get connection from %s\n",
inet_ntoa(client_addr.sin_addr));
if(write(new_fd,hello,strlen(hello))==-1)
{
fprintf(stderr,"Write Error:%s\n",strerror(errno));
exit(1);
}
close(new_fd);
}
close(sockfd);
exit(0);
}
acqy 2003-10-09
  • 打赏
  • 举报
回复
有什么顺序啊?能不能更具体一些?
smokefire 2003-10-09
  • 打赏
  • 举报
回复
应该是头文件的问题 好像有顺序?

23,116

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧