Android NDK编译Bento4出现AP4_Ac4SampleDescription未定义引用报错如何解决
Bento4 Android 平台编译报错原因及修复方案
- 首先你的Android编译指令缺失
CMAKE_BUILD_TYPE参数,且你写的Linux指令存在拼写错误:正确参数为CMAKE_BUILD_TYPE,你写的CMAKE_BUILT_TYPE多了一个字母T。Linux下部分CMake版本会自动忽略无效参数,默认走Release编译流程所以能成功,但是Android NDK的CMake工具链对参数校验更严格,缺失构建类型参数会导致部分源文件的编译宏判断失效,AC4相关类的编译由特殊宏控制,宏未触发的情况下类实现不会被编译,链接阶段就会报undefined reference错误。 - NDK版本兼容性问题:Bento4不同版本对NDK的适配范围不同,NDK 16、17默认使用libstdc作为标准库,NDK 18及以后版本默认切换为libc,如果你的Bento4版本没有适配libc++,18~21版本就会出现STL接口不匹配、类型定义冲突等其他报错。
- AC4模块编译开关默认关闭:Bento4默认在Android平台下会关闭小众编码格式的编译支持,你可以手动添加编译参数强制开启AC4模块的编译,即可解决
AP4_Ac4SampleDescription类找不到的问题。
你可以使用修复后的编译指令执行构建:
cmake -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_TOOLCHAIN_FILE=$NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABI=$ABI \ -DANDROID_NATIVE_API_LEVEL=$MINSDKVERSION \ -DAP4_BUILD_AC4=ON \ # NDK18及以上版本额外添加下面这行参数 # -DANDROID_STL=c++_static \ ..
内容的提问来源于stack exchange,提问作者Adrian Bartyczak
相关产品推荐
相关产品推荐

