Я пытаюсь заставить наше приложение работать на устройстве Arm, спецификации:
Architecture: aarch64
Byte Order: Little Endian
Model name: ARMv8 Processor rev 3 (v8l)
и для этого я установил необходимый кросс-компилятор
sudo apt-get install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu
и так как мы используем Qt, я также кросс-скомпилировал Qt для этой конкретной архитектуры:
./configure -xplatform linux-aarch64-gnu-g++ -opensource \
-confirm-license -nomake tests -nomake examples -static \
-skip qtwebengine -release -prefix /opt/qt5-arm -no-xcb \
-no-opengl -no-use-gold-linker
Наше приложение связано с видео для Linux, поэтому у нас есть следующая строка компиляции:
aarch64-linux-gnu-g++ -o bin/executable <removed unimportant stuff>...
-lv4l2 -lv4lconvert -L/opt/qt5-arm/plugins/imageformats -lqgif
-L/opt/qt5-arm/lib -lqicns -lqico -lqjpeg -lQt5DBus
-lQt5Gui -lqtlibpng -lqtharfbuzz -lQt5Network -lQt5Core
-lm -lqtpcre2 -ldl -lpthread
И так как я не кросс-компиляция видео для Linux, очевидно, я получил следующее сообщение об ошибке:
/usr/bin/aarch64-linux-gnu-ld: cannot find -lv4l2
/usr/bin/aarch64-linux-gnu-ld: cannot find -lv4lconvert
collect2: error: ld returned 1 exit status
и тут возникает вопрос:
Откуда я могу получить исходники для video4linux и как мне их скомпилировать для моей архитектуры? Пожалуйста, обратите внимание, я нашел что-то с именем v4l-utils из https://www.linuxtv.org/downloads/ но:
Спасибо за помощь
ld
не может найти пакет v4l, вам нужно установить пакет в вашей системе сборки или загрузить пакет вручную и указать путь.
sudo apt install v4l-utils
После установки пакета, если вы введете команду which v4l2
он предоставит путь, по которому он установлен, и вы будете знать, что у вас есть необходимая библиотека.
Вы также можете скачать пакет с этого сайта. https://packages.debian.org/sid/v4l-utils
Исходный код для v4l2 его часть драйвера ядра Linux v4l2
Других решений пока нет …