Я пытаюсь скомпилировать GTK 3.24.33 из исходников. В какой-то момент в процессе сборки я получил следующую ошибку
Cannot load module /home/felix/apps/src/libraries/gtk-3.24.33/modules/input/im-wayland.la: /home/felix/apps/src/libraries/gtk-3.24.33/modules/input/.libs/im-wayland.so: undefined symbol: wl_proxy_marshal_flags
Конечно
nm /home/felix/apps/src/libraries/gtk-3.24.33/modules/input/.libs/im-wayland.so | grep wl_proxy_marshal_flags
возвращается
U wl_proxy_marshal_flags
Если я сделаю
ldd /home/felix/apps/src/libraries/gtk-3.24.33/modules/input/.libs/im-wayland.so
Я получаю среди других зависимостей
libwayland-client.so.0 => /home/felix/apps/install/lib/x86_64-linux-gnu/libwayland-client.so.0 (0x00007f417c745000)
и
nm /home/felix/apps/install/lib/x86_64-linux-gnu/libwayland-client.so.0 | grep wl_proxy_marshal_flags
возвращается
0000000000006740 T wl_proxy_marshal_flags
Как возможно, что возникает undefined symbol
ошибка? Мне кажется, что есть вся необходимая информация, чтобы найти символ wl_proxy_marshal_flags
.
Решение проблемы
Как может произойти ошибка неопределенного символа? Мне кажется, что есть вся необходимая информация, чтобы найти символ wl_proxy_marshal_flags.
Есть как минимум два возможных ответа:
- Определение символа присутствует в
libwayland-client.so.0
, но не экспортируется из него. - Какая-то другая версия
libwayland-client.so.0
загружается в любой двоичный файл, вызываемый на неудачном этапе сборки.
Чтобы доказать или опровергнуть (1), используйте nm -D /home/felix/apps/install/lib/x86_64-linux-gnu/libwayland-client.so.0 | grep wl_proxy_marshal_flags
. Если символ появляется в nm -D...
выводе, значит он экспортирован (и доступен для компоновки по im-wayland.so
). Если это не так, то (1) является основной причиной.
Чтобы выяснить, что libwayland-client.so.0
загружается во время сборки, вам нужно выяснить, какая Makefile
команда выполняется, и добавить к ней префикс env LD_DEBUG=files,libs...
. Использование этой переменной среды дает динамическому загрузчику указание печатать, какие двоичные файлы и библиотеки он загружает. Найдите этот вывод для libwayland-client.so.0
. Если загружается системная версия (вместо созданной вами), возможно, эта версия не wl_proxy_marshal_flags
экспортировала из нее.
Если (2) является причиной, вам, возможно, придется установить LD_LIBRARY_PATH
перед выполнением сборки. (Это также означает, что Makefile
s для GTK не работает.)
Комментариев нет:
Отправить комментарий