xcode - 如何为 arm64e 编译 FFmpeg - clang 无法创建可执行文件
问题描述
我们在 Xcode/Swift 项目中使用 FFmpeg。使用 arm64 架构编译和运行应用程序效果很好。现在我们要支持带有 A12Z 芯片的设备。他们有架构“arm64e”。我们正在使用来自kewlbear 的构建脚本并将该行修改ARCHS="arm64 armv7 x86_64 i386"
为ARCHS="arm64e arm64 armv7 x86_64 i386"
. clang is unable to create an executable file
当我们运行脚本时,我们在 arm64e 的构建开始时收到错误消息。我们如何解决这个问题?
解决方案
我也遇到过同样的问题,检查后发现arm64的参数“--cpu”不正确。原来是“--cpu=arm64-v8a”。正确的是“--cpu=armv8-a”。“--cpu”参数必须以“armv”开头,您可以在FFMPEG配置文件中找到线索,如下所示:
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
下面是我的脚本,它可以很好地工作。
#!/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
推荐阅读
- asp.net - How to render "&" operator sign in ASP.NET MVC
- swift - Should I use Delegation or DataStore to passing data BACKWARD in Clean Swift architecture?
- python - Scipy 稀疏矩阵在余弦相似度中的内存效率不高
- c - 如何指定在执行结束时执行一条指令?
- verilog - 访问具有相同代码的两个实例,而无需为每个实例重复它
- sql-server - 将兼容级别从 100 切换到 130 会导致锁定或死锁问题吗?
- javascript - 将 Lodash 的 mergeWith 与嵌套对象一起使用
- django - Django默认在数据库
- angular - Angular : Updating model doesnt work on consecutive click events
- ruby-on-rails - 使用 Phusion Passenger 5.0.30 运行 Rails 2.2.2 应用程序