首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为FFmpeg - clang编译arm64e -clang无法创建可执行文件

如何为FFmpeg - clang编译arm64e -clang无法创建可执行文件
EN

Stack Overflow用户
提问于 2021-01-05 20:10:30
回答 1查看 528关注 0票数 1

我们在Xcode/Swift项目中使用FFmpeg。使用arm64架构编译和运行该应用程序运行良好。现在我们想用A12Z芯片来支持设备。他们有"arm64e“的架构。我们使用从kewlbear构建脚本并将行ARCHS="arm64 armv7 x86_64 i386"修改为ARCHS="arm64e arm64 armv7 x86_64 i386"。当我们运行脚本时,我们在arm64e的构建开始时得到一个错误的arm64e。我们如何解决这个问题呢?

EN

回答 1

Stack Overflow用户

发布于 2021-12-27 09:40:54

我遇到了同样的问题,经过检查后,我发现参数"--cpu“对于arm64是不正确的。原来的是"--cpu=arm64-v8a“。正确的是"--cpu=armv8-a“。"--cpu“参数必须以"armv”开头,您可以在FFMPEG配置文件中找到线索,如下所示:

代码语言:javascript
复制
case $cpu in
    armv*)
        cpuflags="-march=$cpu"
        subarch=$(echo $cpu | sed 's/[^a-z0-9]//g')
    ;;
    *)
        cpuflags="-mcpu=$cpu"
        case $cpu in
            cortex-a*)                               subarch=armv7a  ;;
            cortex-r*)                               subarch=armv7r  ;;
            cortex-m*)                 enable thumb; subarch=armv7m  ;;
            arm11*)                                  subarch=armv6   ;;
            arm[79]*e*|arm9[24]6*|arm96*|arm102[26]) subarch=armv5te ;;
            armv4*|arm7*|arm9[24]*)                  subarch=armv4   ;;
            *)                             subarch=$(probe_arm_arch) ;;
        esac
    ;;
esac

下面是我的纸条,它可以很好的工作。

代码语言:javascript
复制
#!/bin/bash

TOOLCHAIN=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64/
API=21


function build_android
{
echo "Compiling FFmpeg for $CPU"
./configure \
    --disable-x86asm \
    --prefix=$PREFIX \
    --disable-static \
    --enable-shared \
    --enable-small \
    --enable-gpl \
    --disable-doc \
    --disable-programs \
    --disable-avdevice \
    --enable-cross-compile \
    --target-os=android \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-symver \
    --cross-prefix=$CROSS_PREFIX \
    --arch=$ARCH \
    --cpu=$CPU \
    --cc=$CC

make clean
make -j32
make install
echo "The Compilation of FFmpeg for $CPU is completed"
}

#armv8-a
ARCH=arm64
CPU=armv8-a
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++
SYSROOT=$TOOLCHAIN/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android-
PREFIX=$(pwd)/android/$CPU
build_android

# armv8a -> arm64 -> aarch64-linux-android-
# armv7a -> arm -> arm-linux-androideabi-
# x86 -> x86 -> i686-linux-android-
# x86_64 -> x86_64 -> x86_64-linux-android-

#armv7-a
ARCH=arm
CPU=armv7-a
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++
SYSROOT=$TOOLCHAIN/sysroot
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-
PREFIX=$(pwd)/android/$CPU
build_android
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65585890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档