FFmpeg报错大全
2021-08-14
g++ ffmpeg_main.cpp -o main -lstdc++ -lavformat -lavutil
报错
/bin/ld: /tmp/ccIemqbh.o: undefined reference to symbol 'avcodec_parameters_copy@@LIBAVCODEC_58'
/usr/local/lib/libavcodec.so: error adding symbols: DSO missing from command line
collect2: 错误:ld 返回 1
原因,动态依赖库的引用是有顺序的,改成这样就ok了。
g++ ffmpeg_main.cpp -o main -lavformat -lavcodec -lavutil
-------------------------------------------------------------------------------------------------------------------------------
运行./main的时候,报错,说动态库不存在
./main: error while loading shared libraries: libavformat.so: cannot open shared object file: No such file or directory
然后我把动态库放在ffmpeg目录下,然后把目录拷到/lib下面,运行ldconfig, 发现还是不生效。
后来只能按网上试一试:
在ld.so.conf文件中,加入FFmpeg安装lib路径
sudo vi /etc/ld.so.conf
加入:/usr/local/ffmpeg/lib/
完成后执行如下命令
sudo ldconfig
摘自:https://blog.csdn.net/wh8_2011/article/details/69808630
2024-02-04
如果--cc用 clang, --cxx用 clang++
configure时报错:C compiler test failed 的解决办法:
--sysroot=$NDK/toolchains/llvm/prebuilt/linux-x86_64/sysroot \
---------------------------------------------------------------------------------------------------
好奇怪ffmpeg编译时,明明指定了--prefix参数,但是它在指定目录只生成了libavdevice.so一个文件。我以为自己哪里错了。
后来发现它放到了各个模块下面,比如 libavutil/libavutil.so.58
开始用file命令,只返回了
libavutil.so.58: ELF 64-bit LSB shared object, version 1 (SYSV), dynamically linked, not stripped
64位的样子,没看到aarch64的标志,以为还是原linux的包(64位的)
后来用readelf -h libavutil.so.58 | grep Machine 命令查看,就显示正常了。
Machine: AArch64
2024-02-05
是的,strip无法识别安卓交叉编译的动态包是正常的。
对于Android动态链接库(.so文件),如果你使用交叉编译工具链(如arm-linux-androideabi-gcc)进行编译,生成的动态链接库是为特定的目标架构(如ARM)设计的。在这种情况下,strip命令可能无法正确处理这些动态链接库,因为它们包含针对特定架构的机器码和链接信息。
因此,如果你需要在Android平台上使用strip命令处理动态链接库,你可能需要使用适用于目标架构的正确版本的strip命令。另外,如果你只需要减小动态链接库的大小,可以考虑使用其他工具或方法,如使用ProGuard等代码压缩和优化工具,或者手动去除不必要的符号和调试信息。
需要注意的是,对于Android平台上的动态链接库,符号信息和调试信息对于进行符号调试和错误定位非常重要。因此,通常不建议在发布版本中完全去除这些信息。
posted on 2021-08-14 11:39 angelshelter 阅读(1271) 评论(0) 编辑 收藏 举报