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  阅读(1164)  评论(0编辑  收藏  举报

导航