V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
StefanJ
V2EX  ›  FFmpeg

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

  •  
  •   StefanJ · 2020-08-14 11:00:48 +08:00 · 2702 次点击
    这是一个创建于 1597 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    • jni/src/EncodeImpl.cpp:116: error: undefined reference to 'avcodec_send_frame'
    • jni/src/EncodeImpl.cpp:123: error: undefined reference to 'avcodec_receive_packet'

    查看 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
    
    3 条回复    2020-08-14 16:42:21 +08:00
    StefanJ
        1
    StefanJ  
    OP
       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
        2
    StefanJ  
    OP
       2020-08-14 12:50:01 +08:00
    解决了🤔,重新下载了一份源码,没问题了....
    msg7086
        3
    msg7086  
       2020-08-14 16:42:21 +08:00
    遇到过这种情况,一般是没有先 clean 导致的,有些配置残留在目录里。
    忘记 clean 的话可以用 git 的清理目录功能把多余的文件删掉。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2600 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 04:59 · PVG 12:59 · LAX 20:59 · JFK 23:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.