LINUX.ORG.RU

ld: undefined reference на функцию wl_display_connect() библиотеки wlroots. CLion IDE, проект CMake

 , , , ,


0

2

Здравствуйте. Не могу собрать программу с библиотекой wlroots, ибо линкер не видит функцию wl_display_connect(). При этом, структуры wl_display и wl_event_loop он распознаёт. CLion IDE всё видит.

Пробовал установить $LIBRARY_PATH в значение

$LIBRARY_PATH:/usr/lib/:usr/lib64:/lib:/lib64

и перезайти в систему, но это не помогло.

В интернете говорят, что можно попробовать запустить линкер с опцией -L/usr/lib64, но я хз куда тут её добавлять, попробовал добавить add_link_options(-L/usr/lib64), но терминальный вывод вообще никак не изменился.

Что делать?

★★

Последнее исправление: MrCookie (всего исправлений: 1)

Сухари сушить. А по сурьезному - не юзать библиотек кроме стандартных - ни-ка-ких. Можешь не писать - не пиши (с) Антон Павлович Чехов; это к тебе - напрямую относится!

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

Можешь не писать - не пиши

Не могу не писать, извините

MrCookie ★★
() автор топика

проект CMake

В интернете говорят, что можно попробовать запустить линкер с опцией -L/usr/lib64, но я хз куда тут её добавлять

Выросло поколение. Ну продолжайте ненавидеть нормальные GNU make и BSD make. Осознание дебильности CMake приходит только через страдания.

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

Да я вообще первый раз под линуксом на С++ пишу. CLion делает проект на плюсах по умолчанию с CMake. Что ж, попробую обычный make.

MrCookie ★★
() автор топика

wl_display_connect находится в библиотеке wayland-client, а не в wlroots.

# Вставлять после add_executable
# projectname замени на имя своего проекта, который передаётся в add_executable

find_package(PkgConfig REQUIRED)

pkg_check_modules(WLROOTS REQUIRED wlroots)
target_link_libraries(projectname ${WLROOTS_LIBRARIES})
target_include_directories(projectname PUBLIC ${WLROOTS_INCLUDE_DIRS})

pkg_check_modules(WCLIENT REQUIRED wayland-client)
target_link_libraries(projectname ${WCLIENT_LIBRARIES})
target_include_directories(projectname PUBLIC ${WCLIENT_INCLUDE_DIRS})
ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Вот вывод CLion:

/program-files/clion/clion-2024.1.4/bin/cmake/linux/x64/bin/cmake --build "/run/media/mrcookie/My Files/MyApps/NewLookDE/cmake-build-debug" --target NewLookDE -j 3
[1/1] Linking CXX executable NewLookDE
FAILED: NewLookDE 
: && /usr/bin/g++ -g  CMakeFiles/NewLookDE.dir/main.cpp.o -o NewLookDE   && :
/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/ld: CMakeFiles/NewLookDE.dir/main.cpp.o: в функции «main»:
/run/media/mrcookie/My Files/MyApps/NewLookDE/main.cpp:11:(.text+0x15): undefined reference to `wl_display_connect'
/usr/lib64/gcc/x86_64-suse-linux/13/../../../../x86_64-suse-linux/bin/ld: /run/media/mrcookie/My Files/MyApps/NewLookDE/main.cpp:18:(.text+0x6f): undefined reference to `wl_display_disconnect'
collect2: error: ld returned 1 exit status
ninja: build stopped: subcommand failed.
MrCookie ★★
() автор топика
Ответ на: комментарий от MrCookie

Я имел ввиду как ты в cmake файле это делаешь? Пробуй вставить портянку, которую я прислал в другом сообщении.

ox55ff ★★★★★
()

Структуры распознает, потому что их оно берет из хидеров.

-I /path/to/dir указывает, откуда взять хидеры.

-L /path/to/dir указывает, где линкеру искать библиотеки для линковки.

-lfoobar указывает, что нужно прилинковать объектный файл libfoobar.a

Посмотри, где оно хранится в ФС и попробуй подключить с правильными путями и именами.

witaway
()
Ответ на: комментарий от MrCookie

cmake однозначно. Он плохой, но это стандарт де-факто. В любом случае эти знания будут полезны, потому что огромное число проектов собирается с помощью cmake.

Плюс у тебя CLion и в нём с Makefile работать можно, но не удобно. А cmake легко открывается и все фишки работают.

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

Если у тебя нет желания сильно углубляться, можешь ещё попробовать Meson. Оно сейчас модное и, в целом, не такое запутанное. Не такой стандарт промышленности, как CMake. Подводные камни есть, но решаются обычно не особо мучительно. Думаю, для пет-проекта почти любой сложности этого хватит. Половина гнумовской экосистемы собирается им, им хватает.

witaway
()
Последнее исправление: witaway (всего исправлений: 3)
Ответ на: комментарий от MrCookie

Конечно CMake. «Нормальные GNU make и BSD make» может предлагать тот кто за пределами локалхоста свои поделки никогда не собирал. В этой фразе уже содержится ущербность данного подхода, потому что реализаций make несколько и они несовместимы.

anonymous
()
Ответ на: комментарий от ox55ff

можно cделать лучше.

pkg_check_modules(wldeps REQUIRED IMPORTED_TARGET wlroots wayland-client)

target_link_libraries(projectname PkgConfig::wldeps)
Lrrr ★★★★★
()
Ответ на: комментарий от intelfx

Твоя портянка из прошлого десятилетия, натурально.

Чем тебя прошлое десятилетие обидело?

pathfinder ★★★★
()

Тут уже ответили на счет линковки. Хочу только добавить, что, скорее всего, тебе нужно будет также подключать сгенерированный код для каких-то расширений (как это сделано, например, в KDE). Потому что все протоколы/расширения хранятся в виде .xml (примерно как Khronos сделали) и нужно генерировать .c/.h файлы чтобы использовать протокол. Потому что сам wayland-client довольно голый, чтобы его нормально можно было использовать в проде.

maxis11
()
Последнее исправление: maxis11 (всего исправлений: 1)
Ответ на: комментарий от maxis11

да, только не надо тащить зависимость от этих extra-cmake-modules в свои проекты. Потому что KDE-шники очень любят добавлять в дистрах в зависимости к этому пакету весь свой SDK.

Захотел один текстовый файл, который строго говоря вообще не относится к кедам - получил пару гигов зависимостей на лицо. Отлично, я считаю.

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

Зато его портянка просто есть, а от тебя кроме хейта ничего по делу ждать не приходится.

u5er
()
Ответ на: комментарий от Lrrr

Я бы бахнул conan пакетом или же подмодулем. А из-за не очень умных maintainer’ов разработчики (в идеально мире) не должны страдать.

maxis11
()
Ответ на: комментарий от MrCookie

А что помешало попробовать написать «Hello, world» в текстовом редакторе, вызывать свой C++ компилятор (например g++) ручками? Нужно же посмотреть как он работает, как и какие аргументы принимает.

И не было бы вопросов, что такое "-L/usr/lib64" потому что станет очевидно, что это такое.

И с осознанием всего этого можно разобраться как работает, например GNU make. В конечном итоге он просто выполняет команды в sh (в нашем случае вызывает «g++ ...»).

И самое главное: когда этот путь один раз пройдешь, никакое IDE станет нафиг не нужно, потому что поправить что-то ручками (касаемо сборки) будет в 100 раз проще, чем разбираться куда соответствующая опция «закопана» в IDE.

Редактирование же кода нужно осуществлять в нормальном редакторе. К таковым относятся, например, GNU Emacs и Vim. При должной настройке они будут ничуть не хуже автодополнять код, осуществлять рефакторинг и т.п. А, ИМХО, GNU Emacs может такое, что ни одно IDE нормально делать не умеет: поддерживать клавиатурные макросы + исполнять Emacs Lisp, что позволяет всякую рутину решать за пару минут (включая создание и исполнение).

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

нормальном редакторе

Для меня это IDE от JetBrains. Самое удобное, что есть на свете.

При должной настройке они будут ничуть не хуже автодополнять код, осуществлять рефакторинг и т.п

При должной настройке – ключевой момент.

поддерживать клавиатурные макросы + исполнять Emacs Lisp

Ну и на кой чёрт оно мне нужно?

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

Для меня это IDE от JetBrains. Самое удобное, что есть на свете.

Ну-ну. Скажи-ка сходу как выполнить замену по регулярному выражению? А в Emacs это даже запоминать не надо, потому что редактор сам подскажет какие функции он знает.

При должной настройке – ключевой момент.

Чтобы настроить GNU Emacs под себя, я трачу минут 15.

Ну и на кой чёрт оно мне нужно?

Чтобы не делать руками однообразные действия. Один раз делаешь, редактор запоминает, а потом повторяет этот набор действий нужное тебе количество раз.

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

Скажи-ка сходу как выполнить замену по регулярному выражению?

https://www.jetbrains.com/help/idea/tutorial-finding-and-replacing-text-using-regular-expressions.html#capture_groups_and_backreference

Чтобы настроить GNU Emacs под себя, я трачу минут 15.

Только если уже настраивал. С нуля вкатиться за 15 минут не выйдет. Не говоря уже про изучения диалекта лишпа.

Чтобы не делать руками однообразные действия.

Нишевый кейс на два раза в год. Не представляю себе проект, в котором постоянно такое нужно делать. Но если вдруг каким-то образом понадобится, то CLion тоже есть макросы https://www.jetbrains.com/help/idea/using-macros-in-the-editor.html

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

Начал за здравие, а кончил за упокой… Вроде пара разумных и полезных мыслей, а потом раз — и, без предупреждения войны, без предпосылок, IDE-срач.

witaway
()
Последнее исправление: witaway (всего исправлений: 1)
Ответ на: комментарий от ox55ff

Только если уже настраивал. С нуля вкатиться за 15 минут не выйдет. Не говоря уже про изучения диалекта лишпа.

поставить evil и сразу пользоваться, остальное по ходу нагуглится)

anonymous
()
Ответ на: комментарий от zx_gamer

регулярному выражению

У меня была проблема, и я написал регулярное выражение. Теперь у меня две проблемы.

А так — Shift+R и в меню выбрать regex

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

Иксы скоро исчезнут.

Запусти Clion в нативном Wayland. Когда запустишь и покажешь скрин, тогда мы продолжим разговор о смерти Xorg.

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

Запусти Clion в нативном Wayland.

Ну что ты начинаешь это. Это оракл виноват, не хочет переписывать swing на вайланд.

тогда мы продолжим разговор о смерти Xorg

Кто же виноват если житбрейнсы не хотят переписать его на gtk/swt/flutter?

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

Иксы скоро исчезнут.

наивный чукотский юноша

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

Ну да, оно через XWayland крутится, ну и что с того? Уже слишком много юзеров сидят на вейланде, делать что-то для иксов – просто нецелесообразно.

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

Ну в таком случае смысла от десктопного линпукса и не будет.
Хотя, если мультимониторные конфиги починят, то может быть ещё как-то…

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