Ошибка при загрузке разделяемых библиотек: внутренняя ошибка

Я перекрестно скомпилировал OpenCV для руки в соответствии с этим руководством и построил эту программу .

Когда я впервые запустил его так:

  • Как удалить кэш-устройство из bcache?
  • Arch ntpd / ntpdate не синхронизирует часы
  • Почему пользователь root имеет контроль над каталогами mysql, но не отображается как член группы mysql?
  • Может ли ps отображать только неядерные процессы в Linux?
  • Запуск задания cron случайным образом на каждый час
  • Могу ли я сделать общий каталог в частном каталоге?
  • ./DisplayImage image.png 

    Я получил:

    ./DisplayImage: ошибка при загрузке разделяемых библиотек:
    libopencv_highgui.so.3.1: невозможно открыть файл общих объектов: нет такого файла или каталога

    Поэтому я решил, что ему нужна библиотека libopencv_highgui.so.3.1 . Поэтому я добавил все эти библиотеки в /lib :

     (1) libopencv_highgui.so (2) libopencv_highgui.so.3.1 (3) libopencv_highgui.so.3.1.0 

    символические ссылки: (1) -> (2) -> (3)

    Но теперь я получаю:

    ./DisplayImage: ошибка при загрузке разделяемых библиотек:
    lib / libopencv_highgui.so.3.1: внутренняя ошибка

    Я запустил file как в библиотеке, так и в исполняемом файле, чтобы проверить их информацию, и это результат:

     .../opencv/platforms/linux/my_build/lib$ file libopencv_highgui.so.3.1.0 libopencv_highgui.so.3.1.0: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, BuildID[sha1]=1107ba22b36437bedb37dbfe0250626c14759be9, not stripped .../opencv_sample$ file DisplayImage DisplayImage: ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=aef57fe79d0928ca3afdff8d1b65268e1ad72e77, not stripped 

    редактировать:
    Запуск readelf -d DisplayImage | grep NEEDED readelf -d DisplayImage | grep NEEDED производит:

      0x00000001 (NEEDED) Shared library: [libopencv_highgui.so.3.1] 0x00000001 (NEEDED) Shared library: [libopencv_imgcodecs.so.3.1] 0x00000001 (NEEDED) Shared library: [libopencv_core.so.3.1] 0x00000001 (NEEDED) Shared library: [libstdc++.so.6] 0x00000001 (NEEDED) Shared library: [libgcc_s.so.1] 0x00000001 (NEEDED) Shared library: [libc.so.6] 0x00000001 (NEEDED) Shared library: [ld-linux-armhf.so.3] 

    Я нашел их всех на моей цели, кроме ld-linux-armhf.so.3 .

    Что может вызвать эту проблему «внутренней ошибки»?

  • Может ли монитор отслеживать другие компьютеры Linux в сети?
  • отключение ctrl-alt-del и / etc / init
  • Как узнать, поддерживает ли моя беспроводная карта 5ghz?
  • почему Linux загружается только на моем компьютере, когда я добавляю pci = noacpi в grub? Должен ли я заменить свой ноутбук? Это достаточно серьезно?
  • Почему ленивый MNT_DETACH или `umount -l` небезопасно / опасно?
  • Передайте некоторые указания о логике ветвления в сценарий
  • One Solution collect form web for “Ошибка при загрузке разделяемых библиотек: внутренняя ошибка”

    когда бинарный файл скомпилирован, он может использовать разделяемые библиотеки, эти библиотеки являются ссылками с номером версии, чтобы вы могли поддерживать поддерживаемый библиотечный модуль.

    иногда вы можете уйти с сим, связывающим новую библиотеку с более старым именем, двоичный код будет пытаться использовать этот.

    однако это не означает, что двоичный файл будет поддерживать эту версию. Некоторые функции могут быть изменены, некоторые функции удалены или добавлены, и так далее.

    Поэтому я бы предложил перекомпилировать двоичный файл с более новой версией libary, во время компиляции будут помечены несовместимости.

    вы можете видеть зависимости библиотек с помощью ldd.

    Пример;

     $ ldd /bin/ls linux-vdso.so.1 (0x00007ffc65ff3000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x00007f9033f91000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9033bf1000) libpcre.so.3 => /lib/x86_64-linux-gnu/libpcre.so.3 (0x00007f9033979000) libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9033771000) /lib64/ld-linux-x86-64.so.2 (0x0000558f25845000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9033551000) 

    Edit: ps … вы не можете просто копировать файлы через их собственные зависимости. для вашей компиляционной машины вам понадобятся аналогичные версии lib для компиляции.

    Linux и Unix - лучшая ОС в мире.