LINUX.ORG.RU

undefined reference to .... при сборке со статическими библиотеками

 ,


0

1

undefined reference to …. при сборке со статическими библиотеками Собрал статические библиотеки libxau libxdmcp libxcb и libX11 пытаюсь собрать с libX11 например jwm на этапе работы configure


configure:3652: checking for XOpenDisplay in -lX11

configure:3677: gcc -o conftest -Wl,--start-group -lXau -lxcb -lX11 -Wl,--end-group -march=x86-64 -mtune=generic -Os -pipe -static -s -no-pie -fno-lto -fomit-frame-pointer -fstack-protector-strong -fno-unwind-tables -fno-asynchronous-unwind-tables -ffunction-sections -fdata-sections -Wl,--gc-sections -Wl,-z,relro  conftest.c -lX11   >&5

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(xcb_io.o): in function `require_socket.part.0':
xcb_io.c:(.text.require_socket.part.0+0x39): undefined reference to `xcb_take_socket'

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(xcb_io.o): in function `poll_for_event':
xcb_io.c:(.text.poll_for_event+0x6a): undefined reference to `xcb_poll_for_queued_event'

/usr/bin/ld: xcb_io.c:(.text.poll_for_event+0x71): undefined reference to `xcb_poll_for_event'

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(xcb_io.o): in function `poll_for_response':
xcb_io.c:(.text.poll_for_response+0xab): undefined reference to `xcb_poll_for_reply64'

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(xcb_io.o): in function `_XSend':
xcb_io.c:(.text._XSend+0x131): undefined reference to `xcb_writev'

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(xcb_io.o): in function `_XEventsQueued':
xcb_io.c:(.text._XEventsQueued+0x74): undefined reference to `xcb_connection_has_error'

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(xcb_io.o): in function `_XReadEvents':
xcb_io.c:(.text._XReadEvents+0xa5): undefined reference to `xcb_wait_for_event'

/usr/bin/ld: xcb_io.c:(.text._XReadEvents+0x185): undefined reference to `xcb_connection_has_error'

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(xcb_io.o): in function `_XAllocIDs':
xcb_io.c:(.text._XAllocIDs+0x46): undefined reference to `xcb_generate_id'

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(xcb_io.o): in function `_XReply':
xcb_io.c:(.text._XReply+0x129): undefined reference to `xcb_wait_for_reply64'

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(OpenDis.o): in function `OutOfMemory':
OpenDis.c:(.text.OutOfMemory+0x14): undefined reference to `xcb_disconnect'

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(OpenDis.o): in function `XOpenDisplay':
OpenDis.c:(.text.XOpenDisplay+0x44b): undefined reference to `xcb_get_setup'

/usr/bin/ld: OpenDis.c:(.text.XOpenDisplay+0x8d0): undefined reference to `xcb_get_maximum_request_length'

/usr/bin/ld: /usr/lib/gcc/x86_64-static-linux-musl/9.3.0/../../../libX11.a(xcb_disp.o): in function `_XConnectXCB':
xcb_disp.c:(.text._XConnectXCB+0x63): undefined reference to `xcb_parse_display'

/usr/bin/ld: xcb_disp.c:(.text._XConnectXCB+0xa9): undefined reference to `xcb_connect_to_display_with_auth_info'

/usr/bin/ld: xcb_disp.c:(.text._XConnectXCB+0xb5): undefined reference to `xcb_connect'

/usr/bin/ld: xcb_disp.c:(.text._XConnectXCB+0xd5): undefined reference to `xcb_get_file_descriptor'

/usr/bin/ld: xcb_disp.c:(.text._XConnectXCB+0xf1): undefined reference to `xcb_generate_id'

/usr/bin/ld: xcb_disp.c:(.text._XConnectXCB+0x16a): undefined reference to `xcb_connection_has_error'

collect2: error: ld returned 1 exit status

Библиотеки libxau libxdmcp libxcb и libX11 установленны. Функции которые вызывают находятся в libX11 зависимости находятся в libxcb. Пробовал к CFLAGS дописывать -lX11 -lxcb и -lxcb -lX11 т.к. вроде проядок перечисления библиотек имеет значение, пробовал -Wl,–start-group -lXau -lxcb -lX11 -Wl,–end-group тоже не помогает. Может кто подскажет как избавиться от «…undefined reference to…» ?

Как проверял что библиотеки установлены. libxcb разбросана по библиотекам

$ ldconfig -p | grep libxcb
# их тут много
и флажки нужно устанавливать для каждого пакета свой (на Ubuntu именно так)
$ pkg-config --cflags --libs xcb xcb-randr
-lxcb -lxcb-randr

cvprog ()

Пробовал к CFLAGS дописывать

не знаю, что ты там пытаешься собрать, но CFLAGS - это флаги компиляции, а не линковки. и если тебе нужно добавить дополнительные библиотеки - прописывай их в LIBS или LDFLAGS

ananas ★★★★★ ()
Ответ на: комментарий от cvprog

ldconfig ничего не выдает :) наверно потому что использую musl а не glibc. И насколько я понимаю он показывает динамические библиотеки.

pkg-config так и выдает

$ pkg-config --cflags --libs xcb xcb-randr
-lxcb -lxcb-randr

Проверял наличие файлов в /usr/lib/ И если убрать пакет с библиотекой то получается другая ошибка

/usr/bin/ld: cannot find -lxcb
static2021 ()
Ответ на: комментарий от static2021

CFLAGS - это переменная, и какие-бы флаги туда не прописывались, она обычно при линковке не используется. Особенно в autotools. Пропиши либы в LIBS и, если нужно, дополнительные флаги для линкера в LDFLAGS

ananas ★★★★★ ()
Ответ на: комментарий от ananas

CFLAGS - это переменная, и какие-бы флаги туда не прописывались, она обычно при линковке не используется. Особенно в autotools. Пропиши либы в LIBS и, если нужно, дополнительные флаги для линкера в LDFLAGS

Не особо расчитывал что поможет, но сработало:) СПАСИБО! Прописал библиотеки в LIBS.

static2021 ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.