Chinaunix

标题: 用eclipse的ctd写的第一个linux程序,总是编译错误! [打印本页]

作者: pengxueping    时间: 2006-04-05 17:33
标题: 用eclipse的ctd写的第一个linux程序,总是编译错误!
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

.................
作者: pengxueping    时间: 2006-04-06 09:48
郁闷,竟然无人回答




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2