title: c libev undefined reference to `ev_default_loop'
body: <p>I am running gcc compiler on ubuntu i am using an example to learn how to make a socket connection with libev i have libev4 and libev-dev installed but and everything works fine except when i add struct ev_loop *loop = ev_default_loop(0); its throws an undefined reference error can anyone please tell what is wrong here is my code</p>
  
  <pre><code>#include &lt;stdio.h&gt;
  #include &lt;netinet/in.h&gt;
  #include &lt;ev.h&gt;
  
  #define PORT_NO 3033
  #define BUFFER_SIZE 1024
  
  int total_clients = 0;  // Total number of connected clients
  
  void accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents);
  void read_cb(struct ev_loop *loop, struct ev_io *watcher, int revents);
  
  int main() {
      struct ev_loop *loop = ev_default_loop(0); &lt;--error--&gt;
      int sd;
      struct sockaddr_in addr;
      int addr_len = sizeof(addr);
      struct ev_io w_accept;
  
      // Create server socket
      if ((sd = socket(PF_INET, SOCK_STREAM, 0)) &lt; 0) {
          perror("socket error");
          return (-1);
      }
  
      bzero(&amp;addr, sizeof(addr));
      addr.sin_family = AF_INET;
      addr.sin_port = htons(PORT_NO);
      addr.sin_addr.s_addr = INADDR_ANY;
  
      // Bind socket to address
      if (bind(sd, (struct sockaddr*) &amp;addr, sizeof(addr)) != 0) {
          perror("bind error");
      }
  
      // Start listing on the socket
      if (listen(sd, 2) &lt; 0) {
          perror("listen error");
          return (-1);
      }
  
      // Initialize and start a watcher to accepts client requests
      ev_io_init(&amp;w_accept, accept_cb, sd, EV_READ);
      ev_io_start(loop, &amp;w_accept); &lt;-- error --&gt;
  
      // Start infinite loop
      while (1) {
          ev_loop(loop, 0);
      }
  
      return (0);
  }
  
  /* Accept client requests */
  void accept_cb(struct ev_loop *loop, struct ev_io *watcher, int revents) {
      struct sockaddr_in client_addr;
      socklen_t client_len = sizeof(client_addr);
      int client_sd;
      struct ev_io *w_client = (struct ev_io*) malloc(sizeof(struct ev_io));
  
      if (EV_ERROR &amp; revents) {
          perror("got invalid event");
          return;
      }
  
      // Accept client request
      client_sd = accept(watcher-&gt;fd, (struct sockaddr *) &amp;client_addr,
                         &amp;client_len);
  
      if (client_sd &lt; 0) {
          perror("accept error");
          return;
      }
  
      total_clients++; // Increment total_clients count
      printf("Successfully connected with client.\n");
      printf("%d client(s) connected.\n", total_clients);
  
      // Initialize and start watcher to read client requests
      ev_io_init(w_client, read_cb, client_sd, EV_READ);
      ev_io_start(loop, w_client); &lt;--error--&gt;
  }
  
  /* Read client message */
  void read_cb(struct ev_loop *loop, struct ev_io *watcher, int revents) {
      char buffer[BUFFER_SIZE];
      ssize_t read;
  
      if (EV_ERROR &amp; revents) {
          perror("got invalid event");
          return;
      }
  
      // Receive message from client socket
      read = recv(watcher-&gt;fd, buffer, BUFFER_SIZE, 0);
  
      if (read &lt; 0) {
          perror("read error");
          return;
      }
  
      if (read == 0) {
          // Stop and free watchet if client socket is closing
          ev_io_stop(loop, watcher); &lt;--error--&gt;
          free(watcher);
          perror("peer might closing");
          total_clients--; // Decrement total_clients count
          printf("%d client(s) connected.\n", total_clients);
          return;
      } else {
          printf("message:%s\n", buffer);
      }
  
      // Send message bach to the client
      send(watcher-&gt;fd, buffer, read, 0);
      bzero(buffer, read);
  }
  </code></pre>
  
  <p>I am getting multiple error that i have marked can anyone please tell me what's wrong i did a lot of search but didn't found anything.</p>