GCC дает неопределенную ссылку при использовании pkg-config для связи с библиотекой XCB.

Я следую руководству по программированию X11 из здесь. На странице представлены 2 команды, которые можно использовать для компиляции программы на основе XCB:

gcc -Wall prog.c -o prog `pkg-config --cflags --libs xcb`

и

gcc -Wall prog.c -lxcb

Теперь я пробовал оба. Первый говорит gcc: error: unrecognized command-line option ‘--cflags’. По-видимому, это проблема, связанная с оболочкой (как я видел здесь). Итак, я попробовал bash. И это дает другую ошибку:

/usr/bin/ld: /tmp/ccnURTF3.o: in function `useXlib':
example.c:(.text+0xd6): undefined reference to `XInternAtom'
/usr/bin/ld: /tmp/ccnURTF3.o: in function `useXlibProperly':
example.c:(.text+0x163): undefined reference to `XInternAtoms'
/usr/bin/ld: /tmp/ccnURTF3.o: in function `main':
example.c:(.text+0x4b1): undefined reference to `XOpenDisplay'
/usr/bin/ld: example.c:(.text+0x559): undefined reference to `XCloseDisplay'
collect2: error: ld returned 1 exit status

Это то же самое, что я получаю с gcc -Wall prog.c -lxcb. Итак, я думаю, что bash решило проблему, но их 2. А в Atom, когда вы наводите курсор на функцию, она показывает, из какого она заголовка. Но в этом у меня ничего не получилось.

заранее спасибо


person rushdabs    schedule 21.10.2020    source источник
comment
Каков результат pkg-config --cflags --libs xcb ?   -  person Gerhardh    schedule 21.10.2020
comment
@KamilCuk, да, извините за это   -  person rushdabs    schedule 21.10.2020
comment
@ Герхард Я пробовал это раньше. Это говорит -lxcb. Я думал, что это означает добавить один флаг -lxcb вместо всего этого. Но это тоже не работает. это опечатка кстати   -  person rushdabs    schedule 21.10.2020


Ответы (1)


Похоже, что с годами библиотеки были разделены, а объявления функций были перемещены в другую библиотеку. И теперь xcb зависит от X11 или что-то в этом роде, или, может быть, pkg-config --libs xcb должно выводить -lX11, понятия не имею. Во всяком случае, следующие работы:

gcc -Wall 1.c -lxcb -lX11

или следующие работы:

gcc -Wall 1.c $(pkg-config --cflags --libs xcb) $(pkg-config --cflags --libs x11)    

Было бы неплохо связаться с сопровождающим этого введения, чтобы сообщить ему, что он должен обновить страницу.

person KamilCuk    schedule 21.10.2020
comment
Спасибо. Это именно то, что я ищу. Я дам ему знать. - person rushdabs; 21.10.2020