FFmpeg 编译时 libavcodec/encode.c 未被编进 libacodec.so

2020-08-14 11:00:48 +08:00
 StefanJ

正在尝试在 Android 上使用 ffmpeg 。第一步实现了视频解码,编译时只开启了 decoder,没有问题。第二步实现编码时,开始了 encoder,但是发现 libavcodec/encode.c 未被编进 libacodec.so ,导致编码需要使用的方法不能链接。

clang++: error: linker command failed with exit code 1.

查看 ffmpeg 的编译日志发现,encode.c 好像没被编译,所以 libavcodec.so 中根本就没有 encode 相关方法的实现。

CC	libavcodec/dirac.o
CC	libavcodec/dv_profile.o
CC	libavcodec/error_resilience.o
CC	libavcodec/exif.o
CC	libavcodec/faandct.o
CC	libavcodec/faanidct.o
2627 次点击
所在节点    FFmpeg
3 条回复
StefanJ
2020-08-14 11:02:59 +08:00
编译配置参考的: https://gist.github.com/CaiJingLong/feefa3b63e5b94f5ad1807825861e0e0

```

NDK=$ANDROID_NDK_ROOT
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/darwin-x86_64
API=29

function build_android() {
PREFIX=$(pwd)/android/$CPU
echo "Compiling FFmpeg for $CPU to $PREFIX"

./configure \
--prefix="$PREFIX" \
--disable-stripping \
--enable-jni \
--cross-prefix="$CROSS_PREFIX" \
--target-os=android \
--arch="$ARCH" \
--cpu="$CPU" \
--cc="$CC" \
--cxx="$CXX" \
--enable-cross-compile \
--sysroot="$TOOLCHAIN"/sysroot \
--enable-libx264 \
--extra-cflags="$OPTIMIZE_CFLAGS -Iexternal-libs/x264/$CPU/include" \
--extra-ldflags="$ADDI_LDFLAGS -Lexternal-libs/x264/$CPU/lib" \
$COMMON_FF_CFG_FLAGS

make clean
make
make install
echo "==== The Compilation of FFmpeg for $CPU is completed: $PREFIX ===="
}
```
StefanJ
2020-08-14 12:50:01 +08:00
解决了🤔,重新下载了一份源码,没问题了....
msg7086
2020-08-14 16:42:21 +08:00
遇到过这种情况,一般是没有先 clean 导致的,有些配置残留在目录里。
忘记 clean 的话可以用 git 的清理目录功能把多余的文件删掉。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/698184

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX