неопределенный символ: xmlMemSize при компиляции webkitgtk-2.46.3

Вопрос или проблема

Во время компиляции последнего стабильного релиза 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).

Анализ проблемы

  1. Конфликт версий:

    • Ваша система использует библиотеку libxml2, установленную из стандартных репозиториев, которая находится в /usr/lib/x86_64-linux-gnu/libxml2.so.
    • Файл xmllint в каталоге /usr/local/bin, скорее всего, был скомпилирован с другой версией libxml2, и эта версия не содержит символа xmlMemSize.
  2. Установленные пакеты:

    • Вы установили необходимые пакеты libxml2, libxml2-dev и libxml2-utils из репозиториев. Убедитесь, что они актуальны, и версия совпадает с той, что использует WebKitGTK.

Решения проблемы

  1. Удаление конфликта:

    • Поскольку вы уже решили проблему, удалив файл xmllint в /usr/local/bin, это одно из самых простых решений. Это устраняет конфликт, и теперь компилятор использует правильную версию xmllint из стандартного пути.
  2. Очистка кэша и проверка зависимостей:

    • Если в дальнейшем вы столкнетесь с подобными ошибками, попробуйте выполнить команду очистки кэша:
      sudo ldconfig
    • Это обновит кэши динамических библиотек и поможет избежать проблем с версионным конфликтом.
  3. Проверка путей:

    • Убедитесь, что в переменной PATH используется правильный путь. Например, PATH должен содержать /usr/bin перед /usr/local/bin, чтобы сначала использовать версии программ, установленные из репозиториев.

Заключение

Проблемы с компиляцией из-за конфликтующих библиотек — частая ситуация при работе с CMake и C/C++. Всегда рекомендуется тщательно проверять, какие версии библиотек используются, особенно если у вас установлено несколько версий одной и той же библиотеки. Также полезно удалять старые или неиспользуемые версии исполняемых файлов из каталогов, например, /usr/local/bin, чтобы предотвратить конфликты. Ваше решение удалить конфликтующий файл xmllint абсолютно оправдано и является хорошей практикой для управления зависимостями.

Оцените материал
Добавить комментарий

Капча загружается...