- 论坛徽章:
- 0
|
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
................. |
|