Сборка OpenCV в Ubuntu (неопределенная ссылка на g_memdup2)

Как бы вы безопасно поступили с устаревшей (или слишком новой) версией libpangosft в Ubuntu при сборке OpenCV из исходного кода в Ubuntu 22.04?

[ 18%] Linking CXX executable ../../bin/opencv_test_core
/usr/bin/ld: /lib/x86_64-linux-gnu/libpangoft2-1.0.so.0: undefined reference to `g_memdup2'
collect2: error: ld returned 1 exit status

Я следовал официальному руководству по сборке OpenCV как с opencv_contrib, так и без него, а также использовал -DBUILD_TIFF=ON из-за более ранней несовместимости с установленными в системе библиотеками.

Это с Ubuntu 22.04.

$ apt list libglib2.0-*
libglib2.0-dev-bin/jammy-updates,jammy-security,now 2.72.4-0ubuntu2.3 amd64 [installed,automatic]
libglib2.0-dev-bin/jammy-updates,jammy-security 2.72.4-0ubuntu2.3 i386
libglib2.0-dev/jammy-updates,jammy-security,now 2.72.4-0ubuntu2.3 amd64 [installed]
libglib2.0-dev/jammy-updates,jammy-security 2.72.4-0ubuntu2.3 i386
libglib2.0-doc/jammy-updates,jammy-updates,jammy-security,jammy-security 2.72.4-0ubuntu2.3 all
libglib2.0-tests/jammy-updates,jammy-security 2.72.4-0ubuntu2.3 amd64
libglib2.0-tests/jammy-updates,jammy-security 2.72.4-0ubuntu2.3 i386

libglib2.0-dev — это уже новейшая версия (2.72.4-0ubuntu2.3).

$ ldd /lib/x86_64-linux-gnu/libpangoft2-1.0.so.0
    linux-vdso.so.1 (0x00007ffc91dd9000)
    libpango-1.0.so.0 => /lib/x86_64-linux-gnu/libpango-1.0.so.0 (0x00007f99f8f43000)
    libglib-2.0.so.0 => /lib/x86_64-linux-gnu/libglib-2.0.so.0 (0x00007f99f8e09000)
    libgobject-2.0.so.0 => /lib/x86_64-linux-gnu/libgobject-2.0.so.0 (0x00007f99f8da9000)
    libgio-2.0.so.0 => /lib/x86_64-linux-gnu/libgio-2.0.so.0 (0x00007f99f8bcf000)
    libharfbuzz.so.0 => /lib/x86_64-linux-gnu/libharfbuzz.so.0 (0x00007f99f8b00000)
    libfontconfig.so.1 => /lib/x86_64-linux-gnu/libfontconfig.so.1 (0x00007f99f8ab4000)
    libfreetype.so.6 => /lib/x86_64-linux-gnu/libfreetype.so.6 (0x00007f99f89ec000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f99f87c3000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f99f86dc000)
    libfribidi.so.0 => /lib/x86_64-linux-gnu/libfribidi.so.0 (0x00007f99f86c0000)
    libthai.so.0 => /lib/x86_64-linux-gnu/libthai.so.0 (0x00007f99f86b5000)
    libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f99f863d000)
    libffi.so.8 => /lib/x86_64-linux-gnu/libffi.so.8 (0x00007f99f8630000)
    libgmodule-2.0.so.0 => /lib/x86_64-linux-gnu/libgmodule-2.0.so.0 (0x00007f99f8629000)
    libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f99f860d000)
    libmount.so.1 => /lib/x86_64-linux-gnu/libmount.so.1 (0x00007f99f85c9000)
    libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f99f859d000)
    libgraphite2.so.3 => /lib/x86_64-linux-gnu/libgraphite2.so.3 (0x00007f99f8574000)
    libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f99f8543000)
    libuuid.so.1 => /lib/x86_64-linux-gnu/libuuid.so.1 (0x00007f99f853a000)
    libpng16.so.16 => /lib/x86_64-linux-gnu/libpng16.so.16 (0x00007f99f84ff000)
    libbrotlidec.so.1 => /lib/x86_64-linux-gnu/libbrotlidec.so.1 (0x00007f99f84f1000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f99f8fea000)
    libdatrie.so.1 => /lib/x86_64-linux-gnu/libdatrie.so.1 (0x00007f99f84e6000)
    libblkid.so.1 => /lib/x86_64-linux-gnu/libblkid.so.1 (0x00007f99f84af000)
    libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x00007f99f8418000)
    libbrotlicommon.so.1 => /lib/x86_64-linux-gnu/libbrotlicommon.so.1 (0x00007f99f83f5000)
$ cmake --build . --verbose
[ 16%] Linking CXX executable ../../bin/opencv_test_core
cd opencv/build/modules/core && /usr/bin/cmake -E cmake_link_script CMakeFiles/opencv_test_core.dir/link.txt --verbose=1
/usr/bin/c++    -fsigned-char -W -Wall -Wreturn-type -Wnon-virtual-dtor -Waddress -Wsequence-point -Wformat -Wformat-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG   -Wl,--gc-sections -Wl,--as-needed -Wl,--no-undefined CMakeFiles/opencv_test_core.dir/test/ocl/test_arithm.cpp.o CMakeFiles/opencv_test_core.dir/test/ocl/test_channels.cpp.o CMakeFiles/opencv_test_core.dir/test/ocl/test_dft.cpp.o CMakeFiles/opencv_test_core.dir/test/ocl/test_gemm.cpp.o CMakeFiles/opencv_test_core.dir/test/ocl/test_image2d.cpp.o CMakeFiles/opencv_test_core.dir/test/ocl/test_matrix_expr.cpp.o CMakeFiles/opencv_test_core.dir/test/ocl/test_matrix_operation.cpp.o CMakeFiles/opencv_test_core.dir/test/ocl/test_opencl.cpp.o CMakeFiles/opencv_test_core.dir/test/test_arithm.cpp.o CMakeFiles/opencv_test_core.dir/test/test_async.cpp.o CMakeFiles/opencv_test_core.dir/test/test_concatenation.cpp.o CMakeFiles/opencv_test_core.dir/test/test_conjugate_gradient.cpp.o CMakeFiles/opencv_test_core.dir/test/test_countnonzero.cpp.o CMakeFiles/opencv_test_core.dir/test/test_cuda.cpp.o CMakeFiles/opencv_test_core.dir/test/test_downhill_simplex.cpp.o CMakeFiles/opencv_test_core.dir/test/test_ds.cpp.o CMakeFiles/opencv_test_core.dir/test/test_dxt.cpp.o CMakeFiles/opencv_test_core.dir/test/test_eigen.cpp.o CMakeFiles/opencv_test_core.dir/test/test_hal_core.cpp.o CMakeFiles/opencv_test_core.dir/test/test_hasnonzero.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin_emulator.cpp.o CMakeFiles/opencv_test_core.dir/test/test_io.cpp.o CMakeFiles/opencv_test_core.dir/test/test_logtagconfigparser.cpp.o CMakeFiles/opencv_test_core.dir/test/test_logtagmanager.cpp.o CMakeFiles/opencv_test_core.dir/test/test_lpsolver.cpp.o CMakeFiles/opencv_test_core.dir/test/test_main.cpp.o CMakeFiles/opencv_test_core.dir/test/test_mat.cpp.o CMakeFiles/opencv_test_core.dir/test/test_math.cpp.o CMakeFiles/opencv_test_core.dir/test/test_misc.cpp.o CMakeFiles/opencv_test_core.dir/test/test_opencl.cpp.o CMakeFiles/opencv_test_core.dir/test/test_operations.cpp.o CMakeFiles/opencv_test_core.dir/test/test_ptr.cpp.o CMakeFiles/opencv_test_core.dir/test/test_quaternion.cpp.o CMakeFiles/opencv_test_core.dir/test/test_rand.cpp.o CMakeFiles/opencv_test_core.dir/test/test_rotatedrect.cpp.o CMakeFiles/opencv_test_core.dir/test/test_umat.cpp.o CMakeFiles/opencv_test_core.dir/test/test_utils.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin128.sse2.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin128.sse3.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin128.ssse3.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin128.sse4_1.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin128.sse4_2.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin128.fp16.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin128.avx.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin128.avx2.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin256.avx2.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin128.avx512_skx.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin256.avx512_skx.cpp.o CMakeFiles/opencv_test_core.dir/test/test_intrin512.avx512_skx.cpp.o -o ../../bin/opencv_test_core  -Wl,-rpath,opencv/build/lib:anaconda3/lib ../../lib/libopencv_ts.a ../../lib/libopencv_highgui.so.4.10.0 -ldl -lm -lpthread -lrt ../../3rdparty/lib/libippiw.a ../../3rdparty/ippicv/ippicv_lnx/icv/lib/intel64/libippicv.a ../../lib/libopencv_videoio.so.4.10.0 ../../lib/libopencv_imgcodecs.so.4.10.0 ../../lib/libopencv_imgproc.so.4.10.0 ../../lib/libopencv_core.so.4.10.0 -lm -lpthread -lrt -Wl,-rpath-link,anaconda3/lib

Вы установили libglib2.0-dev?

3CxEZiVlQ 06.06.2024 18:46

Да, установлена ​​версия 2.72.4-0ubuntu2.3 @3CxEZiVlQ.

matanox 06.06.2024 20:38

Можете ли вы попробовать ldd /lib/x86_64-linux-gnu/libpangoft2-1.0.so.0 и проверить, какая библиотека «не найдена»?

kiner_shah 11.06.2024 13:15

Кроме того, попробуйте cmake --build . --verbose, чтобы увидеть точную команду сборки, которая не удалась. (найдено по адресу stackoverflow.com/a/63690389)

Florian Echtler 11.06.2024 14:17

У меня те же версии упомянутых библиотек, и они для меня скомпилированы. Какую именно версию opencv вы создаете?

Ted Lyngmo 11.06.2024 23:55

Включите вывод apt list libglib2.0-* в свой вопрос, пожалуйста.

Ted Lyngmo 12.06.2024 20:03

Итак, благодаря этому обсуждению и любезным комментариям, объясняющим, на что следует обратить внимание, начиная решать такие вопросы, я заметил, что anaconda, которой я не пользуюсь уже долгое время, кажется, часто всплывает, и удаление anaconda сборка находится на безопасном пути к успешному завершению, никаких других изменений не требуется. Спасибо @TedLyngmo за то, что сообщил мне, что он работает в вашей эквивалентной настройке, что проложило путь к соединению точек в нем, а также за все добрые советы от всех!

matanox 17.06.2024 08:34
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
7
151
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Это ошибка GLib , так как эта функция должна быть представлена ​​в любой версии GLib, начиная с 2.68. Возможно, необходимо обновить установку libpango-dev. Кроме того, я предполагаю, что может возникнуть проблема со связыванием, когда исполняемый файл теста opencv_test_core не объявлен явно связанным с набором библиотек GTK из-за какого-то необработанного случая в сценарии сборки. Это можно исправить, используя что-то вроде этого трюка.

В качестве примера для подобных случаев, как мы можем проследить исходное сообщение об ошибке, что это ошибка GLib?

matanox 17.06.2024 08:40
g_memdup2 — функция Glib
Andrei Vukolov 18.06.2024 18:55
Ответ принят как подходящий

Для справки: в моем конкретном случае после удаления Anaconda все собирается как есть.

Другие вопросы по теме