разрешение неопределенных ссылок xcb - PullRequest
0 голосов
/ 23 февраля 2019

Я могу включить элементы из xcb/xcb.h, но не элементы, обозначенные в /usr/include/xcb/randr.h.

Я предпочитаю использовать C ++, но для отладки я также попробовал C, который выдает варианты одной и той же ошибки.

Я уверен, что что-то делаю неправильно, но я не уверен, гденачать искать, чтобы решить это.Большое спасибо за чтение, есть предложения?

Пример

main.cpp

#include <xcb/xcb.h>
#include <xcb/randr.h>

int main()
{
    const xcb_setup_t                       * xsetup;
    xcb_connection_t                        * conn;
    xcb_screen_t                            * screen;
    xcb_window_t                              root_win;
    xcb_screen_iterator_t                     screen_iterator;
    xcb_randr_get_screen_resources_cookie_t   resources;

    // connect to Xserver
    conn   = xcb_connect(NULL, NULL);
    xsetup = xcb_get_setup(conn);

    // get the root window
    screen_iterator = xcb_setup_roots_iterator(xsetup);
    screen          = screen_iterator.data;
    root_win        = screen->root;

    // any function from xcb/randr.h fails with undefined reference.
    resources = xcb_randr_get_screen_resources(conn, root_win);
}

Компиляция

# gcc tries
gcc -Wall  main.cpp -o main `pkg-config --cflags --libs xcb`
g++ -Wall  main.cpp -o main `pkg-config --cflags --libs xcb`

# clang tries
clang++    main.cpp -o main `pkg-config --cflags --libs xcb`
clang      main.cpp -o main `pkg-config --cflags --libs xcb`

Результат

gcc

/usr/bin/ld: /tmp/ccWR2GQL.o: in function `main':
main.cpp:(.text+0x6c): undefined reference to `xcb_randr_get_screen_resources'
collect2: error: ld returned 1 exit status

clang

/usr/bin/ld: /tmp/main-d114b5.o: in function `main':
main.cpp:(.text+0x67): undefined reference to `xcb_randr_get_screen_resources'
clang-7: error: linker command failed with exit code 1 (use -v to see invocation)

Ответы [ 2 ]

0 голосов
/ 23 февраля 2019

Большое спасибо n.m. и G.M..

Я не связывал xcb-randr.

Решение:

clang++ main.cpp -o main `pkg-config --cflags --libs xcb` -lxcb-randr
0 голосов
/ 23 февраля 2019

библиотеки xcb разделены на несколько разных пакетов;Получается, что вам нужно явно использовать библиотеки xcb и xcb-randr:

... `pkg-config --cflags --libs xcb xcb-randr`

Возможно, ваш дистрибутив Linux отдельно упаковывает библиотеку randr.Проверяя Fedora, он упаковывает и xcb, и xcb-rand в подпакет libxcb-devel;но возможно, что в вашем дистрибутиве Linux есть отдельный подпакет libxcb-randr-devel, который вам нужно установить.

...