B0宏

在编译android平台用的ffmpeg时,抛出这样一个错误:

这句代码怎么看都找出有毛病,为什么B0会报错? 翻看aaccoder.c,也没有发现问题。为什么B0就成了一个常量数字,这里只有一个可能,B0在某处被宏定义了。那么将B0替换名称为BB0,果然顺利通过编译。

但是又不久又报出错误:

又是B0,这次是y##B0,宏展开后是y000000而不是代码希望的yB0,所以报错。B0在asm/termbits.h或asm-generic/termbits.h中被宏定义了

这个B0是linux平台下都定义了的宏,只要你的代码需要引用asm目录下的头文件。解决也就是在报错的源文件将B0给undef。

编译配置参考 http://blog.csdn.net/gobitan/article/details/22750719,这是别人的劳动。

下面是引用它人的脚本代码

#!/bin/bash
NDK=/home/dennis/android-ndk-r9d
SYSROOT=$NDK/platforms/android-9/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64

function build_one
{
./configure 
    --prefix=$PREFIX 
    --enable-shared 
    --disable-static 
    --disable-doc 
    --disable-ffserver 
    --enable-cross-compile 
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- 
    --target-os=linux 
    --arch=arm 
    --sysroot=$SYSROOT 
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" 
    --extra-ldflags="$ADDI_LDFLAGS" 
    $ADDITIONAL_CONFIGURE_FLAG
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one

当然了,最好将ndk的toolchain脚本里的一些编译选项也加入到上面的脚本,还有不要忘记pie选项。

原文地址:https://www.cnblogs.com/bbqzsl/p/7851356.html