Ошибка загрузки разделяемых библиотек после кросс-компиляции: нет такого файла или каталога - PullRequest
1 голос
/ 05 августа 2020

У меня возникают проблемы с загрузкой общих библиотек после кросс-компиляции моего кода C ++ с использованием Docker Buildx, имея в качестве цели Raspberry Pi Zero W.

После выполнения сборки я копирую сгенерированный двоичный файл для уже запущенного Raspberry Pi Zero с установленным OpenCV4.

Когда я запускаю исполняемый файл, отображается следующее сообщение об ошибке:

pi@raspberrypi:/mnt/system/$ ./software.run 
./software.run: error while loading shared libraries: libopencv_freetype.so.4.2: cannot open shared object file: No such file or directory

Несмотря на то, что OpenCV4 уже установлен, этот конкретный lib не было в /usr/lib. Итак, я скопировал его, запустил sudo ldconfig, но даже после этой процедуры мое программное обеспечение все еще не может найти библиотеку.

Я даже добавил / usr / lib в путь к системе, но это не так. не работает.

pi@raspberrypi:/usr/lib $ sudo ldconfig -v | grep libopencv_free
ldconfig: Can't stat /usr/local/lib/arm-linux-gnueabihf: No such file or directory
ldconfig: Path `/lib/arm-linux-gnueabihf' given more than once
ldconfig: Path `/usr/lib/arm-linux-gnueabihf' given more than once
ldconfig: /lib/arm-linux-gnueabihf/ld-2.28.so is the dynamic linker, ignoring

ldconfig: /lib/ld-linux.so.3 is the dynamic linker, ignoring

    libopencv_freetype.so.4.2 -> libopencv_freetype.so.4.2.0

pi@raspberrypi:/mnt/system/ $ file software.run 
software.run: ELF 32-bit LSB pie executable, ARM, EABI5 version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=409a24c10761e2b9fd7a310cddfb09c86fb3a207, not stripped

pi@raspberrypi:/mnt/system $ echo $LD_LIBRARY_PATH
/usr/lib

Makefile:

CC = g++
STD = --std=c++14

SOFTWARE_SRC = $(wildcard src/software/*.cpp)
SOFTWARE_BIN = software.run
CV_LIBS = $(shell pkg-config --cflags --libs opencv4)
SOFTWARE_INC = -Iinclude -I/usr/include -I/usr/local/include
SOFTWARE_LDFLAGS = -lraspicam_cv -L/opt/vc/lib -lmmal -lmmal_core -lmmal_util -lwiringPi

all: software-out

software-out:

        $(CC) $(STD) $(SOFTWARE_SRC) -o $(SOFTWARE_BIN) $(CV_LIBS) $(SOFTWARE_INC) $(SOFTWARE_LDFLAGS)

Другое программное обеспечение, которое также использует OpenCV, работает правильно.

Я также создаю Программа "Hello World" только для проверки моей среды кросс-компиляции, и она работает.

Заранее всем спасибо

EDIT

После нескольких попыток, мне удалось решить проблему, собрав библиотеки локально.

Я не мог определить, что вызвало это, но библиотеки, созданные средой Buildx, не работали должным образом в Raspberry Pi Zero.

Я создаю действительно среду кросс-компиляции для решения этой проблемы.

...