Simple client-type code compiles in ubuntu, but not in osx

Discussion in 'Mac Programming' started by tjw09003, Oct 6, 2010.

  1. macrumors newbie

    Joined:
    Feb 11, 2010
    #1
    This will compile in ubuntu but not osx, gcc output is at the bottom of the post. This code is a monster of copied and pasted code from tutorials, but it does compile in ubuntu :)

    Code:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <netdb.h>
    
    void sendMessagedd(char* test);
    
    void sendMessagedd(char * test){
    int sockfd, portno, n;
        struct sockaddr_in serv_addr;
        struct hostent *server;
    
        char buffer[256];
        /*if (argc < 3) {
           fprintf(stderr,"usage %s hostname port\n", argv[0]);
           exit(0);
        }*/
        portno = atoi("60000");
        sockfd = socket(AF_INET, SOCK_STREAM, 0);
        if (sockfd < 0) 
            error("ERROR opening socket");
        server = gethostbyname("localhost");
        if (server == NULL) {
            fprintf(stderr,"ERROR, no such host\n");
            exit(0);
        }
        bzero((char *) &serv_addr, sizeof(serv_addr));
        serv_addr.sin_family = AF_INET;
        bcopy((char *)server->h_addr, 
             (char *)&serv_addr.sin_addr.s_addr,
             server->h_length);
        serv_addr.sin_port = htons(portno);
        
        if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0) 
            error("ERROR connecting");
            
        //printf("Please enter the message: ");
        bzero(buffer,256);
        //fgets(buffer,255,stdin);
        n = write(sockfd,test,strlen(test));
        if (n < 0) 
             error("ERROR writing to socket");
        bzero(buffer,256);
        
        n = read(sockfd,buffer,255);
        if (n < 0) 
             error("ERROR reading from socket");
        printf("%s\n",buffer);/**/
        close(sockfd);
        
    
    }
    
    int main(void)
    {
    	sendMessagedd("Hello World");
    
    	return 0;
    }
    
    
    gcc output

    Code:
    gcc client.c -o client
    client.c: In function ‘sendMessagedd’:
    client.c:37: warning: passing argument 2 of ‘connect’ from incompatible pointer type
    Undefined symbols:
      "_error", referenced from:
          _sendMessagedd in cc2nPdDt.o
          _sendMessagedd in cc2nPdDt.o
          _sendMessagedd in cc2nPdDt.o
          _sendMessagedd in cc2nPdDt.o
    ld: symbol(s) not found
    collect2: ld returned 1 exit status
    
    
     
  2. macrumors member

    #2
    It's not a compilation error. It's a linker error. The symbol _error cannot be found.

    I am not sure where is that symbol on Mac OS X is. To overcome it you could add a line at the beginning of the file (preferably after #include directives):

    #define error printf

    That will use printf instead of error. This way an executable file will be produced though you need to keep in mind that printf will print error messages to the standard console while error would print to error console. It may matter if you are going to run it in background. I am not an expert here though.
     
  3. thread starter macrumors newbie

    Joined:
    Feb 11, 2010
    #3
    thanks that worked
     

Share This Page