免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2827 | 回复: 1
打印 上一主题 下一主题

用eclipse的ctd写的第一个linux程序,总是编译错误! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-04-05 17:33 |只看该作者 |倒序浏览
windows下,我将eclipse与ctd整合,然后下载mingw,意在eclipse调用mingw的gcc,和make两个程序来进行编译。为了模拟linux下的环境,我下载并安装了cygwin这个东东,并且把cygwin下的头文件和类库的路径都加到了mingw的gcc,和make两个程序所能识别到的路径上(利用环境变量的方法,在eclipse里看到我设置的环境变量都包括了cygwin下的头文件路径和库路径).

我的本意是希望 在windows下开发linux下的程序,并且在windows下能顺利的编译之后,再把源程序和makefile上传到目标linux机器上,然后在在linux机器上make就一切ok了。(请问各位老师,我这个想法是否正确)。

我的一个非常简单的代码,写这代码的目的只是为了知道能否通过使用cygwin和mingw在windows下开发和编译linux程序(调用了linux系统调用的程序):
#include        <sys/types.h>        /* basic system data types */
#include        <sys/socket.h>        /* basic socket definitions */
#include        <sys/time.h>        /* timeval{} for select() */
#include        <time.h>                /* timespec{} for pselect() */
#include        <netinet/in.h>        /* sockaddr_in{} and other Internet defns */
#include        <arpa/inet.h>        /* inet(3) functions */
#include        <errno.h>
#include        <fcntl.h>                /* for nonblocking */
#include        <netdb.h>
#include        <signal.h>
#include        <stdio.h>
#include        <stdlib.h>
#include        <string.h>
#include        <sys/stat.h>        /* for S_xxx file mode constants */
#include        <sys/uio.h>                /* for iovec{} and readv/writev */
#include        <unistd.h>
#include        <sys/wait.h>
#include        <sys/un.h>       


#define        LISTENQ                1024        /* 2nd argument to listen() */
#define        SERV_PORT                 9877       
/* Miscellaneous constants */
#define        MAXLINE                4096        /* max text line length */
#define        MAXSOCKADDR  128        /* max socket address structure size */
#define        BUFFSIZE        8192        /* buffer size for reads and writes */
#define        SA        struct sockaddr

/* Define some port number that can be used for client-servers */

       
int Socket(int family, int type, int protocol)
{
        int                n;

        if ( (n = socket(family, type, protocol)) < 0)
                //err_sys("socket error");
        return(n);
}
/* end Socket */

void
Bind(int fd, const struct sockaddr *sa, socklen_t salen)
{
        if (bind(fd, sa, salen) < 0)
           printf("sfdsadfsafas");
                //err_sys("bind error");
}

void
Listen(int fd, int backlog)
{
        char        *ptr;

                /*4can override 2nd argument with environment variable */
        if ( (ptr = getenv("LISTENQ")) != NULL)
                backlog = atoi(ptr);

        if (listen(fd, backlog) < 0)
            printf("sfdsadfsafas");
                //err_sys("listen error");
}

int
Accept(int fd, struct sockaddr *sa, socklen_t *salenptr)
{
        int                n;

again:
        if ( (n = accept(fd, sa, salenptr)) < 0) {
#ifdef        EPROTO
                if (errno == EPROTO || errno == ECONNABORTED)
#else
                if (errno == ECONNABORTED)
#endif
                        goto again;
                else
                         printf("sfdsadfsafas");
        }
        return(n);
}

pid_t
Fork(void)
{
        pid_t        pid;

        if ( (pid = fork()) == -1)
                printf("sfdsadfsafas");
        return(pid);
}


int
main(int argc, char **argv)
{
        int                                        listenfd, connfd;
        pid_t                                childpid;
        socklen_t                        clilen;
        struct sockaddr_in        cliaddr, servaddr;

        listenfd = Socket(AF_INET, SOCK_STREAM, 0);

        bzero(&servaddr, sizeof(servaddr));
        servaddr.sin_family      = AF_INET;
        servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
        servaddr.sin_port        = htons(SERV_PORT);

        Bind(listenfd, (SA *) &servaddr, sizeof(servaddr));

        Listen(listenfd, LISTENQ);

        for ( ; ; ) {
                clilen = sizeof(cliaddr);
                connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);

                if ( (childpid = Fork()) == 0) {        /* child process */
                        //Close(listenfd);        /* close listening socket */
                        //str_echo(connfd);        /* process the request */
                        exit(0);
                }
                //Close(connfd);                        /* parent closes connected socket */
        }
}



编译的时候,老是报一大堆错误,然而把文件上传到linux机器上编译是正确的。在windows上报错:
g++ tcpserv01.c  -o main
In file included from C:/cygwin/usr/include/asm/socket.h:14,
                 from C:/cygwin/usr/include/cygwin/socket.h:45,
                 from C:/cygwin/usr/include/sys/socket.h:15,(这里连续3个和socket.h相关的话,是什么意思???)
                 from tcpserv01.c:2:
C:/cygwin/usr/include/cygwin/if.h:79: error: `caddr_t' does not name a type
In file included from C:/cygwin/usr/include/sys/socket.h:15,
                 from tcpserv01.c:2:
C:/cygwin/usr/include/cygwin/socket.h:52: error: `__uid32_t' does not name a type
C:/cygwin/usr/include/cygwin/socket.h:53: error: `__gid32_t' does not name a type
In file included from C:/cygwin/usr/include/sys/wait.h:15,
                 from tcpserv01.c:17:
C:/cygwin/usr/include/sys/resource.h:76: error: `id_t' has not been declared
C:/cygwin/usr/include/sys/resource.h:77: error: `id_t' has not been declared

.................

论坛徽章:
0
2 [报告]
发表于 2006-04-06 09:48 |只看该作者
郁闷,竟然无人回答
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP