Как бы вы безопасно поступили с устаревшей (или слишком новой) версией 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
Да, установлена версия 2.72.4-0ubuntu2.3 @3CxEZiVlQ.
Можете ли вы попробовать ldd /lib/x86_64-linux-gnu/libpangoft2-1.0.so.0
и проверить, какая библиотека «не найдена»?
Кроме того, попробуйте cmake --build . --verbose
, чтобы увидеть точную команду сборки, которая не удалась. (найдено по адресу stackoverflow.com/a/63690389)
У меня те же версии упомянутых библиотек, и они для меня скомпилированы. Какую именно версию opencv вы создаете?
Включите вывод apt list libglib2.0-*
в свой вопрос, пожалуйста.
Итак, благодаря этому обсуждению и любезным комментариям, объясняющим, на что следует обратить внимание, начиная решать такие вопросы, я заметил, что anaconda, которой я не пользуюсь уже долгое время, кажется, часто всплывает, и удаление anaconda сборка находится на безопасном пути к успешному завершению, никаких других изменений не требуется. Спасибо @TedLyngmo за то, что сообщил мне, что он работает в вашей эквивалентной настройке, что проложило путь к соединению точек в нем, а также за все добрые советы от всех!
Это ошибка GLib , так как эта функция должна быть представлена в любой версии GLib, начиная с 2.68. Возможно, необходимо обновить установку libpango-dev
. Кроме того, я предполагаю, что может возникнуть проблема со связыванием, когда исполняемый файл теста opencv_test_core
не объявлен явно связанным с набором библиотек GTK из-за какого-то необработанного случая в сценарии сборки. Это можно исправить, используя что-то вроде этого трюка.
В качестве примера для подобных случаев, как мы можем проследить исходное сообщение об ошибке, что это ошибка GLib?
g_memdup2
— функция Glib
Для справки: в моем конкретном случае после удаления Anaconda все собирается как есть.
Вы установили
libglib2.0-dev
?