Android FFmpeg:未定义对 atof、log2 和 log2f 的引用
Android FFmpeg : Undefined references to atof, log2 & log2f
我正在尝试link使用android-ndk-r15c[=为android构建的FFmpeg。我通过下载最新的 ffmpeg-3.3.4.
FFmpeg source 来构建它
以下是我的 linker 列表:
-lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice -lpostproc
我抱怨以下错误
libavformat/hls.c:783: error: undefined reference to 'atof'
libavcodec/ffv1enc.c:146: error: undefined reference to 'log2'
libavcodec/imc.c:428: error: undefined reference to 'log2f'
以下是我的FFmpeg相关包括:
#include <stdint.h>
#include <cstdlib>
#define __STDC_CONSTANT_MACROS
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavutil/mathematics.h"
#include "libavcodec/version.h"
#include "libavutil/rational.h"
#include "libavutil/avstring.h"
#include "libswscale/swscale.h"
}
以下是我的 buildscript 交叉编译 FFmpeg for android:
#!/bin/bash
cd ffmpeg-3.3.4
NDK=/path/to/ndk/android-ndk-r15c
SYSROOT=$NDK/platforms/android-21/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
CPREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-ar
CC=$TOOLCHAIN/bin/arm-linux-androideabi-gcc
CXX=$TOOLCHAIN/bin/arm-linux-androideabi-g++
LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
function build_ffmpeg_android {
./configure \
--prefix=$PREFIX \
--disable-stripping \
--arch=arm \
--cpu=cortex-a8 \
--target-os=linux \
--enable-cross-compile \
--enable-debug \
--enable-pic \
--disable-programs \
--enable-static \
--disable-shared \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--disable-doc \
--enable-postproc \
--enable-swscale \
--enable-avfilter \
--enable-avresample \
--disable-opencl \
--disable-securetransport \
--sysroot=$SYSROOT \
--enable-videotoolbox \
--enable-avresample \
--disable-symver \
#--enable-gpl \
#--enable-libx264
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j9
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_ffmpeg_android
问题:
我想link到哪个图书馆?
我 运行 使用 ndk-r10e
和平台 android-15
构建 ffmpeg-2.8.15
和 x264
这个问题。我更新了代码以使用 android-21
并且编译代码没有任何问题。我们的最低 sdk 版本是 21
.
您还可以选择从 FFMPEG 配置文件中删除这些数学函数并重建。您正在解析的 lib-*.so 文件将不再调用这些符号。
我正在尝试link使用android-ndk-r15c[=为android构建的FFmpeg。我通过下载最新的 ffmpeg-3.3.4.
FFmpeg source 来构建它以下是我的 linker 列表:
-lavformat -lavcodec -lswscale -lavutil -lavfilter -lswresample -lavdevice -lpostproc
我抱怨以下错误
libavformat/hls.c:783: error: undefined reference to 'atof'
libavcodec/ffv1enc.c:146: error: undefined reference to 'log2'
libavcodec/imc.c:428: error: undefined reference to 'log2f'
以下是我的FFmpeg相关包括:
#include <stdint.h>
#include <cstdlib>
#define __STDC_CONSTANT_MACROS
extern "C" {
#include "libavcodec/avcodec.h"
#include "libavformat/avformat.h"
#include "libavutil/mathematics.h"
#include "libavcodec/version.h"
#include "libavutil/rational.h"
#include "libavutil/avstring.h"
#include "libswscale/swscale.h"
}
以下是我的 buildscript 交叉编译 FFmpeg for android:
#!/bin/bash
cd ffmpeg-3.3.4
NDK=/path/to/ndk/android-ndk-r15c
SYSROOT=$NDK/platforms/android-21/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
AR=$TOOLCHAIN/bin/arm-linux-androideabi-ar
CPREFIX=$TOOLCHAIN/bin/arm-linux-androideabi-ar
CC=$TOOLCHAIN/bin/arm-linux-androideabi-gcc
CXX=$TOOLCHAIN/bin/arm-linux-androideabi-g++
LD=$TOOLCHAIN/bin/arm-linux-androideabi-ld
RANLIB=$TOOLCHAIN/bin/arm-linux-androideabi-ranlib
STRIP=$TOOLCHAIN/bin/arm-linux-androideabi-strip
function build_ffmpeg_android {
./configure \
--prefix=$PREFIX \
--disable-stripping \
--arch=arm \
--cpu=cortex-a8 \
--target-os=linux \
--enable-cross-compile \
--enable-debug \
--enable-pic \
--disable-programs \
--enable-static \
--disable-shared \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--disable-doc \
--enable-postproc \
--enable-swscale \
--enable-avfilter \
--enable-avresample \
--disable-opencl \
--disable-securetransport \
--sysroot=$SYSROOT \
--enable-videotoolbox \
--enable-avresample \
--disable-symver \
#--enable-gpl \
#--enable-libx264
$ADDITIONAL_CONFIGURE_FLAG
make clean
make -j9
make install
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_ffmpeg_android
问题:
我想link到哪个图书馆?
我 运行 使用 ndk-r10e
和平台 android-15
构建 ffmpeg-2.8.15
和 x264
这个问题。我更新了代码以使用 android-21
并且编译代码没有任何问题。我们的最低 sdk 版本是 21
.
您还可以选择从 FFMPEG 配置文件中删除这些数学函数并重建。您正在解析的 lib-*.so 文件将不再调用这些符号。