У меня возникают проблемы с загрузкой общих библиотек после кросс-компиляции моего кода 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.
Я создаю действительно среду кросс-компиляции для решения этой проблемы.