Вопрос или проблема
Во время компиляции последнего стабильного релиза webkitgtk-2.46.3 я получаю следующую ошибку:
raphy@raohy:~/Downloads/webkitgtk-2.46.3$ cmake –build builddir/
[ 92%] Собран целевой объект WebCore_CopyPrivateHeaders
[ 92%] Собран целевой объект WebKit-forwarding-headers
[ 92%] Генерация ../../WebKitGTK/DerivedSources
/ModernMediaControlsGResourceBundle.c, ../../WebKitGTK/DerivedSources
/ModernMediaControlsGResourceBundle.c.deps
/usr/local/bin/xmllint: ошибка поиска символа: /usr/local/bin/xmllint: неопределенный символ: xmlMemSize
/home/raphy/Downloads/webkitgtk-2.46.3/builddir/WebKitGTK/DerivedSources /ModernMediaControlsGResourceBundle.xml: Дочерний процесс завершился с кодом 127.
Но подходящая библиотека xml2 была найдена:
raphy@raohy:~/Downloads$ tar -xf webkitgtk-2.46.3.tar.xz
raphy@raohy:~/Downloads$ cd webkitgtk-2.46.3/
raphy@raohy:~/Downloads/webkitgtk-2.46.3$
raphy@raohy:~/Downloads/webkitgtk-2.46.3$ cmake -B builddir -DPORT=GTK
-DUSE_GSTREAMER_WEBRTC=TRUE -DENABLE_WEB_RTC=ON -DUSE_GTK4=OFF
-- Идентификация компилятора C: GNU 12.3.0
-- Идентификация компилятора CXX: GNU 13.2.0
-- Определение ABI-информации компилятора C
-- Определение ABI-информации компилятора C - готово
-- Проверка работоспособности компилятора C: /usr/bin/cc - пропущено
-- Определение функций компиляции C
-- Определение функций компиляции C - готово
-- Определение ABI-информации компилятора CXX
-- Определение ABI-информации компилятора CXX - готово
-- Проверка работоспособности компилятора CXX: /usr/bin/c++ - пропущено
-- Определение функций компиляции CXX
-- Определение функций компиляции CXX - готово
CMake Предупреждение в Source/cmake/WebKitCommon.cmake:10 (message):
Не указано значение CMAKE_BUILD_TYPE, используется значение по умолчанию: RelWithDebInfo.
Стек вызовов (последний вызов первый):
CMakeLists.txt:16 (include)
-- Найдена LibXml2: /usr/lib/x86_64-linux-gnu/libxml2.so (найдена подходящая версия "2.9.14", минимально требуемая "2.8.0") // <---------------------------------------------------------
libxml2
libxml2-dev
libxml2-utils
уже установлены и являются самой последней версией:
raphy@raohy:~$ sudo apt-get install libxml2 libxml2-dev libxml2-utils
Чтение списков пакетов... Готово
Строительство дерева зависимостей... Готово
Чтение информации о состоянии... Готово
libxml2 уже является самой последней версией (2.9.14+dfsg-1.3ubuntu3).
libxml2-dev уже является самой последней версией (2.9.14+dfsg-1.3ubuntu3).
libxml2-utils уже является самой последней версией (2.9.14+dfsg-1.3ubuntu3).
ОС: Ubuntu 24.04
Что я пропустил? Как заставить это работать?
Я решил проблему, удалив файл /usr/local/bin/xmllint
Ответ или решение
Ошибка "undefined symbol: xmlMemSize" при компиляции webkitgtk-2.46.3 возникает из-за конфликта между версиями библиотеки libxml2. В вашем случае вы пытаетесь использовать xmllint, который находится в каталоге /usr/local/bin, и, видимо, он скомпилирован с другой версией libxml2, чем та, что обнаружена на вашей системе (2.9.14).
Анализ проблемы
-
Конфликт версий:
- Ваша система использует библиотеку libxml2, установленную из стандартных репозиториев, которая находится в /usr/lib/x86_64-linux-gnu/libxml2.so.
- Файл xmllint в каталоге /usr/local/bin, скорее всего, был скомпилирован с другой версией libxml2, и эта версия не содержит символа
xmlMemSize
.
-
Установленные пакеты:
- Вы установили необходимые пакеты libxml2, libxml2-dev и libxml2-utils из репозиториев. Убедитесь, что они актуальны, и версия совпадает с той, что использует WebKitGTK.
Решения проблемы
-
Удаление конфликта:
- Поскольку вы уже решили проблему, удалив файл xmllint в /usr/local/bin, это одно из самых простых решений. Это устраняет конфликт, и теперь компилятор использует правильную версию xmllint из стандартного пути.
-
Очистка кэша и проверка зависимостей:
- Если в дальнейшем вы столкнетесь с подобными ошибками, попробуйте выполнить команду очистки кэша:
sudo ldconfig
- Это обновит кэши динамических библиотек и поможет избежать проблем с версионным конфликтом.
- Если в дальнейшем вы столкнетесь с подобными ошибками, попробуйте выполнить команду очистки кэша:
-
Проверка путей:
- Убедитесь, что в переменной PATH используется правильный путь. Например, PATH должен содержать
/usr/bin
перед/usr/local/bin
, чтобы сначала использовать версии программ, установленные из репозиториев.
- Убедитесь, что в переменной PATH используется правильный путь. Например, PATH должен содержать
Заключение
Проблемы с компиляцией из-за конфликтующих библиотек — частая ситуация при работе с CMake и C/C++. Всегда рекомендуется тщательно проверять, какие версии библиотек используются, особенно если у вас установлено несколько версий одной и той же библиотеки. Также полезно удалять старые или неиспользуемые версии исполняемых файлов из каталогов, например, /usr/local/bin, чтобы предотвратить конфликты. Ваше решение удалить конфликтующий файл xmllint абсолютно оправдано и является хорошей практикой для управления зависимостями.