下载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
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐