Sto tentando di compilare questo client in C per Unix, usando gcc

Il codice non dovrebbe contenere errori, dato che è copiato da un libro, eppure il debugger mi scassa e non mi dà l'eseguibile...
ecco il codice:

codice:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <arpa/inet.h>

#define PORT 4000   //port pubblico del server

void addr_initialize();

int main (int argc, char* argv[])
{
  struct sockaddr_in server_addr;
  struct sockaddr_in my_addr;
  int my_addr_len = sizeof(my_addr);
  int error;
  int sd;

  addr_initialize(&server_addr, PORT, (long)inet_addr(argv[1]));
  sd = socket (AF_INET, SOCK_STREAM, 0);
  error = connect(sd, &server_addr, sizeof(server_addr));

  if(error==0){
     printf("\nConnessione eseguita con successo\n");
     getsockname(sd, &my_addr, &my_addr_len);
     printf("Il port e' il numero %d", ntohs(my_addr.sin_port));
     }
  else{
     printf("\nRilevato errore: %i\n\n", error);
     }
  close(sd);

  return 0;
}
Ed ecco cosa mi dice il debugger:
codice:
client.c: In function `main':
client.c:29: warning: passing arg 2 of `connect' from incompatible pointer type
client.c:33: warning: passing arg 2 of `getsockname' from incompatible pointer type
/tmp/ccsiYuLq.o: In function `main':
/home/Kamui/Documents/Client/client.c:27: undefined reference to `addr_initialize'
collect2: ld returned 1 exit status
A parte i due warnings che ci possono stare... non capisco il perchè dei due ultimi errori, che non vengono rilevati normalmente dal gcc all'interno del file client.c, ma hanno un path prima, e poi "collect2" che non so che significhi

Chi sa aiutarmi?