I use official ubuntu jammy docker image in WLS2 ubuntu 2404, target platform is Radxa 3 with RockChip 3568 aarch64 cpu.
docker pull Ubuntu:Jammy
docker images
docker run -it <imgid> /bin/bash
useradd -s '/bin/bash' -m -G adm,sudo theultimateopencvcrosscompileprofile
passwd theultimateopencvcrosscompileprofile
passwd root
su theultimateopencvcrosscompileprofile
sudo dpkg --add-architecture arm64
# Get basic softwares
sudo apt update
sudo apt install -y \
build-essential \
cmake \
crossbuild-essential-arm64 \
curl \
gcc \
gcc-arm-linux-gnueabi \
git \
neofetch \
ninja-build \
pkg-config \
pkgconf \
python3 \
sudo \
wget
# dont forget arm64 deps
sudo apt install -y \
ibavcodec-dev:arm64 \
libavcodec-dev \
libavformat-dev \
libavformat-dev:arm64 \
libavutil-dev:arm64 \
libdc1394-dev \
libdc1394-dev:arm64 \
libfreetype-dev:arm64 \
libglib2.0-dev:arm64 \
libgtk-3-dev \
libgtk2.0-dev \
libgtk2.0-dev:arm64 \
libgtkglext1 \
libgtkglext1-dev \
libharfbuzz-dev:arm64 \
libjpeg-dev \
libpng-dev \
libpython3-dev:arm64 \
libswscale-dev \
libswscale-dev:arm64 \
libtbb-dev \
libtbb2 \
libtiff-dev \
libv4l-dev \
libx264-dev \
libxvidcore-dev \
python3-dev \
python3-numpy
# Tweak apt mirrors if needed
sudo apt install -y vim
sudo vim /etc/apt/source.list
deb [arch=amd64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted
deb [arch=amd64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted
deb [arch=amd64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy universe
deb [arch=amd64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates universe
deb [arch=amd64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy multiverse
deb [arch=amd64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates multiverse
deb [arch=amd64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb [arch=amd64] http://security.ubuntu.com/ubuntu jammy-security main restricted universe multiverse
deb [arch=arm64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main multiverse universe
deb [arch=arm64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main multiverse universe
deb [arch=arm64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main multiverse universe
deb [arch=arm64] http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main multiverse universecd
git clone https://github.com/opencv/opencv.git
cd opencv
git checkout 4.10.0
cd ..
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib
git checkout 4.10.0
cd ..PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig \
PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu \
cmake ../opencv \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ \
-DCMAKE_TOOLCHAIN_FILE=/home/theultimateopencvcrosscompileprofile/opencv/platforms/linux/aarch64-gnu.toolchain.cmake \
-GNinja"cat <<EOF > configure
#!/bin/bash
build_dir="build"
read -p "Build directory exists, overwrite? (Y/n): " choice
case "$choice" in
[Nn]|[Nn][oO])
echo "Exiting without clearing or creating '$build_dir'."
exit 0
;;
*)
if [ -d "$build_dir" ]; then
echo "Clearing contents of '$build_dir'..."
rm -rf "$build_dir"/*
else
echo "Creating '$build_dir' directory..."
mkdir "$build_dir"
fi
;;
esac
cd "$build_dir"
PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig:/usr/share/pkgconfig \
PKG_CONFIG_LIBDIR=/usr/lib/aarch64-linux-gnu \
cmake ../opencv \
-DCMAKE_BUILD_TYPE=Release \
-DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ \
-DCMAKE_TOOLCHAIN_FILE=/home/rainbow/opencv/platforms/linux/aarch64-gnu.toolchain.cmake \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_JAVA=OFF \
-DWITH_GTK3=OFF \
-DWITH_QT=OFF \
-DBUILD_ljasper=ON \
-DWITH_GTK=ON \
-DWITH_GTK_2_X=ON \
-DBUILD_FFMPEG=ON \
-DWITH_FFMPEG=ON \
-DOPENCV_FFMPEG_SKIP_BUILD_CHECK=ON \
-DOPENCV_ENABLE_PKG_CONFIG=ON\
-DOPENCV_UI_BACKEND=GTK,GTK2 \
-DBUILD_LIST=core,videoio,highgui,calib3d,dnn,flann,features2d,imgcodecs,imgproc,objdetect,plot,tracking \
-GNinja"
EOFchmod +x configure
./configurecmake --build build -j20mkdir dist
cp -r build/lib/ opencv/include/ opencv/modules/*/include/ opencv_contrib/modules/*/include/ dist
tar zcf dist.tgz distDone!
https://docs.opencv.org/4.10.0/d3/dd9/tutorial_crosscompile_with_multiarch.html
https://docs.opencv.org/4.x/d6/dea/tutorial_env_reference.html
https://docs.opencv.org/4.10.0/d0/d76/tutorial_arm_crosscompile_with_cmake.html