Erros com o X11

Pessoal, estou tendo problemas com o X11. Algumas linhas de código estão retornando referência indefinida e eu não intendo o que acontece de errado. Alguém sabe o que fazer?

#include <stdio.h>
#include <stdlib.h>
#include <X11/Xlib.h>
#include <X11/keysym.h>

int main(){
    Display *dpy = XOpenDisplay(NULL); //Referência indefinida
    int screen = DefaultScreen(dpy);
    Window win = XCreateSimpleWindow(dpy, RootWindow(dpy, screen), 100, 100, 500, 300, 1, BlackPixel(dpy, screen), WhitePixel(dpy, screen)); //Referência indefinida
    XEvent event;
    if(dpy == NULL){
        fprintf(stderr, "Não foi possível acessar o display.");
        exit(1);
    }
    XSelectInput(dpy, win, ExposureMask | KeyPressMask); //Referência indefinida
    XMapWindow(dpy, win); //Referência indefinida
    while(1){
        XNextEvent(dpy, &event); //Referência indefinida
    }
    return 0;
}