From 6c1bff5d0c09f45686921ab4b869e55c40e7b5fc Mon Sep 17 00:00:00 2001 From: mofeng-git Date: Sat, 20 Jun 2026 21:28:01 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=20mpp=20=E5=BA=93?= =?UTF-8?q?=E9=9D=99=E6=80=81=E6=9E=84=E5=BB=BA=E9=94=99=E8=AF=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build/cross/Dockerfile.arm64 | 4 +++- build/cross/Dockerfile.armv7 | 4 +++- libs/hwcodec/build.rs | 20 ++++++-------------- 3 files changed, 12 insertions(+), 16 deletions(-) diff --git a/build/cross/Dockerfile.arm64 b/build/cross/Dockerfile.arm64 index 7ccbbc14..624a99e0 100644 --- a/build/cross/Dockerfile.arm64 +++ b/build/cross/Dockerfile.arm64 @@ -274,6 +274,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \ && make -j$(nproc) \ && make install \ && sed -i 's/^Libs:.*$/& -lstdc++ -lm -lpthread/' /usr/aarch64-linux-gnu/lib/pkgconfig/rockchip_mpp.pc \ + && rm -f /usr/aarch64-linux-gnu/lib/librockchip_mpp.so* \ && cd ../.. \ # Build RKRGA - create cross file for meson && echo '[binaries]' > /tmp/aarch64-cross.txt \ @@ -301,6 +302,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \ && ar rcs /usr/aarch64-linux-gnu/lib/librga.a $(find build -name '*.o') \ && ranlib /usr/aarch64-linux-gnu/lib/librga.a \ && sed -i 's/^Libs:.*$/& -lstdc++ -lm -lpthread/' /usr/aarch64-linux-gnu/lib/pkgconfig/librga.pc \ + && rm -f /usr/aarch64-linux-gnu/lib/librga.so* \ && cd .. \ # Create pkg-config wrapper for cross-compilation && echo '#!/bin/sh' > /tmp/aarch64-pkg-config \ @@ -407,4 +409,4 @@ ENV CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc \ LIBYUV_STATIC=1 \ OPUS_STATIC=1 \ PKG_CONFIG_ALL_STATIC=1 \ - RUSTFLAGS="-C linker=aarch64-linux-gnu-gcc" + RUSTFLAGS="-C linker=aarch64-linux-gnu-gcc -C link-arg=-Wl,--allow-multiple-definition" diff --git a/build/cross/Dockerfile.armv7 b/build/cross/Dockerfile.armv7 index 09f543ae..7dbeeac4 100644 --- a/build/cross/Dockerfile.armv7 +++ b/build/cross/Dockerfile.armv7 @@ -263,6 +263,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \ && make -j$(nproc) \ && make install \ && sed -i 's/^Libs:.*$/& -lstdc++ -lm -lpthread/' /usr/arm-linux-gnueabihf/lib/pkgconfig/rockchip_mpp.pc \ + && rm -f /usr/arm-linux-gnueabihf/lib/librockchip_mpp.so* \ && cd ../.. \ # Build RKRGA - create cross file for meson && echo '[binaries]' > /tmp/armhf-cross.txt \ @@ -290,6 +291,7 @@ RUN mkdir -p /tmp/ffmpeg-build && cd /tmp/ffmpeg-build \ && ar rcs /usr/arm-linux-gnueabihf/lib/librga.a $(find build -name '*.o') \ && ranlib /usr/arm-linux-gnueabihf/lib/librga.a \ && sed -i 's/^Libs:.*$/& -lstdc++ -lm -lpthread/' /usr/arm-linux-gnueabihf/lib/pkgconfig/librga.pc \ + && rm -f /usr/arm-linux-gnueabihf/lib/librga.so* \ && cd .. \ # Create pkg-config wrapper for cross-compilation && echo '#!/bin/sh' > /tmp/armhf-pkg-config \ @@ -396,7 +398,7 @@ ENV CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc \ LIBYUV_STATIC=1 \ OPUS_STATIC=1 \ PKG_CONFIG_ALL_STATIC=1 \ - RUSTFLAGS="-C linker=arm-linux-gnueabihf-gcc" + RUSTFLAGS="-C linker=arm-linux-gnueabihf-gcc -C link-arg=-Wl,--allow-multiple-definition" # Default command CMD ["bash"] diff --git a/libs/hwcodec/build.rs b/libs/hwcodec/build.rs index 95c8297b..6ad68271 100644 --- a/libs/hwcodec/build.rs +++ b/libs/hwcodec/build.rs @@ -338,7 +338,7 @@ mod ffmpeg { println!("cargo:rustc-link-lib=static=avcodec"); println!("cargo:rustc-link-lib=static=avutil"); - // Link hardware acceleration dependencies (dynamic) + // Link hardware acceleration dependencies // These vary by architecture if target_arch == "x86_64" { // VAAPI for x86_64 @@ -347,13 +347,11 @@ mod ffmpeg { println!("cargo:rustc-link-lib=va-x11"); // Required for vaGetDisplay println!("cargo:rustc-link-lib=mfx"); } else { - // RKMPP for ARM - println!("cargo:rustc-link-lib=rockchip_mpp"); - let rga_static = lib_dir.join("librga.a"); - if rga_static.exists() { - println!("cargo:rustc-link-lib=static=rga"); - } else { - println!("cargo:rustc-link-lib=rga"); + for lib in ["rockchip_mpp", "rga"] { + if !lib_dir.join(format!("lib{lib}.a")).exists() { + panic!("missing static library: lib{lib}.a"); + } + println!("cargo:rustc-link-lib=static={}", lib); } } @@ -412,12 +410,6 @@ mod ffmpeg { // For static linking, link FFmpeg libs statically, others dynamically if lib_name.starts_with("av") || lib_name == "swresample" { println!("cargo:rustc-link-lib=static={}", lib_name); - } else if lib_name == "rga" - && link_paths - .iter() - .any(|path| Path::new(path).join("librga.a").exists()) - { - println!("cargo:rustc-link-lib=static=rga"); } else { // Runtime libraries (va, drm, etc.) must be dynamic println!("cargo:rustc-link-lib={}", lib_name);