基于Xuantie-900-gcc-linux-6.6.0-musl32-x86_64-V3.2.1 工具链编译opencv-4.9.0
·
下载opencv-4.9.0源码
创建build.sh
#!/bin/bash
# OpenCV 4.9.0 RISC-V32 Cross-compilation Build Script
# Toolchain: Xuantie-900-gcc-linux-6.6.0-musl32-x86_64-V3.2.1
# Target: riscv32-unknown-linux-musl
set -e # Exit on any error
LOG_FILE="build.log"
BUILD_DIR="build"
INSTALL_DIR="install"
echo "Starting OpenCV 4.9.0 RISC-V32 cross-compilation build..."
echo "Timestamp: $(date)" | tee -a "$LOG_FILE"
echo "Working directory: $(pwd)" | tee -a "$LOG_FILE"
echo "Toolchain: */Xuantie-900-gcc-linux-6.6.0-musl32-x86_64-V3.2.1" | tee -a "$LOG_FILE"
echo "========================================================================" | tee -a "$LOG_FILE"
# Create build directory
echo "Creating build directory..." | tee -a "$LOG_FILE"
mkdir -p "$BUILD_DIR"
cd "$BUILD_DIR"
# Create toolchain file
echo "Creating CMake toolchain file..." | tee -a "$LOG_FILE"
cat > riscv32-toolchain.cmake << 'EOF'
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR riscv32)
set(TOOLCHAIN_PREFIX riscv32-unknown-linux-musl)
set(TOOLCHAIN_ROOT */Xuantie-900-gcc-linux-6.6.0-musl32-x86_64-V3.2.1)
set(CMAKE_C_COMPILER ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-gcc)
set(CMAKE_CXX_COMPILER ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-g++)
set(CMAKE_AR ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-ar)
set(CMAKE_LINKER ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-ld)
set(CMAKE_NM ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-nm)
set(CMAKE_OBJCOPY ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-objcopy)
set(CMAKE_OBJDUMP ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-objdump)
set(CMAKE_RANLIB ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-ranlib)
set(CMAKE_STRIP ${TOOLCHAIN_ROOT}/bin/${TOOLCHAIN_PREFIX}-strip)
set(CMAKE_FIND_ROOT_PATH ${TOOLCHAIN_ROOT}/sysroot)
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=rv32imacxtheadc -mabi=ilp32 -Os" CACHE STRING "C flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=rv32imacxtheadc -mabi=ilp32 -Os" CACHE STRING "CXX flags")
EOF
echo "Toolchain file created successfully." | tee -a "$LOG_FILE"
# Configure with CMake
echo "Configuring OpenCV with CMake..." | tee -a "$LOG_FILE"
cmake .. \
-DCMAKE_TOOLCHAIN_FILE=./riscv32-toolchain.cmake \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=OFF \
-DBUILD_TESTS=OFF \
-DBUILD_PERF_TESTS=OFF \
-DBUILD_EXAMPLES=OFF \
-DBUILD_DOCS=OFF \
-DBUILD_opencv_apps=OFF \
-DBUILD_opencv_python2=OFF \
-DBUILD_opencv_python3=OFF \
-DBUILD_opencv_java=OFF \
-DWITH_CUDA=OFF \
-DWITH_OPENCL=OFF \
-DWITH_FFMPEG=OFF \
-DWITH_GSTREAMER=OFF \
-DWITH_GTK=OFF \
-DWITH_QT=OFF \
-DWITH_VTK=OFF \
-DWITH_OPENGL=OFF \
-DWITH_V4L=OFF \
-DWITH_1394=OFF \
-DWITH_PNG=ON \
-DWITH_JPEG=ON \
-DWITH_TIFF=ON \
-DWITH_WEBP=OFF \
-DWITH_OPENEXR=OFF \
-DWITH_EIGEN=OFF \
-DWITH_IPP=OFF \
-DWITH_TBB=OFF \
-DWITH_OPENMP=OFF \
-DWITH_PTHREADS_PF=ON \
-DWITH_LAPACK=OFF \
-DWITH_PROTOBUF=OFF \
-DENABLE_PRECOMPILED_HEADERS=OFF \
-DENABLE_PROFILING=OFF \
-DENABLE_COVERAGE=OFF \
-DCV_TRACE=OFF \
-DOPENCV_ENABLE_NONFREE=OFF \
-DCMAKE_INSTALL_PREFIX=*/opencv-4.9.0/install \
2>&1 | tee -a "$LOG_FILE"
if [ $? -ne 0 ]; then
echo "ERROR: CMake configuration failed!" | tee -a "$LOG_FILE"
exit 1
fi
echo "CMake configuration completed successfully." | tee -a "$LOG_FILE"
# Build OpenCV
echo "Building OpenCV..." | tee -a "$LOG_FILE"
START_TIME=$(date +%s)
make -j$(nproc) 2>&1 | tee -a "$LOG_FILE"
BUILD_EXIT_CODE=$?
END_TIME=$(date +%s)
BUILD_DURATION=$((END_TIME - START_TIME))
if [ $BUILD_EXIT_CODE -ne 0 ]; then
echo "ERROR: Build failed!" | tee -a "$LOG_FILE"
exit 1
fi
echo "Build completed successfully in $BUILD_DURATION seconds." | tee -a "$LOG_FILE"
# Install OpenCV
echo "Installing OpenCV..." | tee -a "$LOG_FILE"
make install 2>&1 | tee -a "$LOG_FILE"
if [ $? -ne 0 ]; then
echo "ERROR: Installation failed!" | tee -a "$LOG_FILE"
exit 1
fi
echo "Installation completed successfully." | tee -a "$LOG_FILE"
# Verify installation
echo "Verifying installation..." | tee -a "$LOG_FILE"
echo "Installed libraries:" | tee -a "$LOG_FILE"
ls -la ../install/lib/ | tee -a "$LOG_FILE"
echo "Checking library architecture (should be RISC-V):" | tee -a "$LOG_FILE"
*/Xuantie-900-gcc-linux-6.6.0-musl32-x86_64-V3.2.1/bin/riscv32-unknown-linux-musl-readelf -h ../install/lib/libopencv_core.a | head -20 | tee -a "$LOG_FILE"
echo "Library sizes:" | tee -a "$LOG_FILE"
du -sh ../install/lib/*.a | tee -a "$LOG_FILE"
echo "========================================================================" | tee -a "$LOG_FILE"
echo "OpenCV 4.9.0 RISC-V32 cross-compilation build completed successfully!" | tee -a "$LOG_FILE"
echo "Build log saved to: $LOG_FILE" | tee -a "$LOG_FILE"
echo "Installation directory: ../install" | tee -a "$LOG_FILE"
echo "Total build time: $BUILD_DURATION seconds" | tee -a "$LOG_FILE"
echo "Timestamp: $(date)" | tee -a "$LOG_FILE"
执行build.sh
Checking library architecture (should be RISC-V):
File: ../install/lib/libopencv_core.a(algorithm.cpp.o)
ELF Header:
Magic: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
Class: ELF32
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: REL (Relocatable file)
Machine: RISC-V
Version: 0x1
Entry point address: 0x0
Start of program headers: 0 (bytes into file)
Start of section headers: 25864 (bytes into file)
Flags: 0x1, RVC, soft-float ABI
Size of this header: 52 (bytes)
Size of program headers: 0 (bytes)
Number of program headers: 0
Size of section headers: 40 (bytes)
Library sizes:
9.7M ../install/lib/libopencv_calib3d.a
11M ../install/lib/libopencv_core.a
15M ../install/lib/libopencv_dnn.a
2.5M ../install/lib/libopencv_features2d.a
1.9M ../install/lib/libopencv_flann.a
724K ../install/lib/libopencv_highgui.a
1.7M ../install/lib/libopencv_imgcodecs.a
9.5M ../install/lib/libopencv_imgproc.a
2.3M ../install/lib/libopencv_ml.a
3.5M ../install/lib/libopencv_objdetect.a
2.0M ../install/lib/libopencv_photo.a
2.0M ../install/lib/libopencv_stitching.a
1.7M ../install/lib/libopencv_video.a
1.8M ../install/lib/libopencv_videoio.a
========================================================================
OpenCV 4.9.0 RISC-V32 cross-compilation build completed successfully!
Build log saved to: build.log
Installation directory: ../install
Total build time: 316 seconds
Timestamp: 2026年 05月 21日 星期四 17:25:44 CST
更多推荐

所有评论(0)