android - libmp3lame.a 中 undefined symbol _init_xrpow_core_init

标签 android ffmpeg lame

我正在使用 ffmpeg tool with x264在我的 android 项目中用于编码视频。现在我想添加音频转换功能,从 3gpp 到 mp3。据我了解,我应该将 libmp3lame 添加到 ffmpeg bin。

我已经下载了last lame version并更新了一些文件:

android_build.sh

#!/bin/bash

. settings.sh

BASEDIR=$(pwd)
TOOLCHAIN_PREFIX=${BASEDIR}/toolchain-android

for i in "${SUPPORTED_ARCHITECTURES[@]}"
do
  rm -rf ${TOOLCHAIN_PREFIX}
  ./x264_build.sh $i $BASEDIR 0 || exit 1
  ./lame_build.sh $i $BASEDIR 0 || exit 1
  ./ffmpeg_build.sh $i $BASEDIR 0 || exit 1
done

rm -rf ${TOOLCHAIN_PREFIX}

lame_build.sh
#!/bin/bash

. abi_settings.sh $1 $2 $3

pushd lame

make clean

case $1 in
  armeabi-v7a | armeabi-v7a-neon)
    HOST=arm-linux
  ;;
  x86)
    HOST=i686-linux
  ;;
esac

echo $CFLAGS

./configure \
  --with-pic \
  --host="$HOST" \
  --enable-static \
  --disable-shared \
  --prefix="${TOOLCHAIN_PREFIX}" || exit 1

make -j${NUMBER_OF_CORES} install || exit 1

popd

ffmpeg_build.sh
#!/bin/bash
. abi_settings.sh $1 $2 $3

pushd ffmpeg

case $1 in
  armeabi-v7a | armeabi-v7a-neon)
    CPU='cortex-a8'
  ;;
  x86)
    CPU='i686'
  ;;
esac

make clean

./configure \
--target-os="$TARGET_OS" \
--cross-prefix="$CROSS_PREFIX" \
--arch="$NDK_ABI" \
--cpu="$CPU" \
--enable-runtime-cpudetect \
--sysroot="$NDK_SYSROOT" \
--enable-pic \
--enable-libx264 \
--enable-libmp3lame \
--enable-pthreads \
--disable-debug \
--disable-ffserver \
--enable-version3 \
--enable-hardcoded-tables \
--disable-ffplay \
--disable-ffprobe \
--enable-gpl \
--enable-yasm \
--disable-doc \
--disable-shared \
--enable-static \
--pkg-config="${2}/ffmpeg-pkg-config" \
--prefix="${2}/build/${1}" \
--extra-cflags="-I${TOOLCHAIN_PREFIX} -I${MP3LAME}/include $CFLAGS" \
--extra-ldflags="-L${TOOLCHAIN_PREFIX} -L${MP3LAME}/lib $LDFLAGS" \
--extra-libs="-lm" \
--extra-cxxflags="$CXX_FLAGS" || exit 1

make -j${NUMBER_OF_CORES} && make install || exit 1

popd

./android_build.sh 的结果:
/bin/sh ../libtool --tag=CC   --mode=link gcc  -O3  -ffast-math             -funroll-loops -Wall  -fno-common      -static  -o lame lame_main.o main.o brhist.o console.o get_audio.o lametime.o parse.o timestatus.o ../libmp3lame/libmp3lame.la -lncurses  -liconv -lm 
libtool: link: gcc -O3 -ffast-math -funroll-loops -Wall -fno-common -o lame lame_main.o main.o brhist.o console.o get_audio.o lametime.o parse.o timestatus.o  ../libmp3lame/.libs/libmp3lame.a -lncurses -liconv -lm
Undefined symbols for architecture x86_64:
  "_init_xrpow_core_sse", referenced from:
      _init_xrpow_core_init in libmp3lame.a(quantize.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[1]: *** [lame] Error 1
make: *** [install-recursive] Error 1

我会很高兴你的答复!

最佳答案

我能够使用 --host="x86_64" 解决问题

主机 CPU x86_64 将强制 libmp3lame 构建所需的内部向量库,而其他主机则不会。

关于android - libmp3lame.a 中 undefined symbol _init_xrpow_core_init,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30136417/

相关文章:

android - 在 Android 上使用 OpenGL 绘制全屏单帧动画是否可行?

android - 将 MenuItem 添加到其他应用程序选项/操作菜单 (Android)

android - 如何在 Android 中显示顶部栏消息

java - ArrayList<>,在创建另一个对象时添加对象

amazon-web-services - 在 amazon aws S3 上用 moviepy 编写的视频是空的

python - 如何使用ffmpeg从视频中提取帧并在内存中读取为python中的图像列表而不写入文件

Android java.lang.UnsatisfiedLinkError - 找不到 "libffmpeg.so"

c++ - 用 LAME 编码的 MP3 的长度

c - 关于在 C 中使用 LAME 的问题

c - 如何在C中将PCM 8kHz 8位无符号转换为mp3