基于Qt开发FFMpeg遇到的编译错误问题

问题现象描述:

找不到FFMpeg 以av开头的有关的函数,链接问题

原因分析:

排除了安装的问题,版本问题之后,最后发现是C++引用c动态库的用法不对,因为qt项目采用C++编译,但FFMpeg库是c语言的,要在引用的地方使用extern "C"包含起来。

底层逻辑:

C语言的函数转成汇编之后,会直接生成相关的函数名;C++语言有所不同,因为C++语言支持重载,所以会多附带一些字符在函数后面,如果没有特别的标记,C++编译的时候无法找到对应的函数名,所以会链接报错。

扩展:

C和C++语言的相互调用法则:

C++调用C的函数,需要在调用的地方加上extern "C" { },大括号里面是包含的头文件或者函数声明。

C项目调用C++的函数,不能直接调用,必须在C++源码里加上用extern "C"包起来的函数名,然后才可以被C的代码调用。如果已知编译后的C++函数名,用C强行调用,在Linux系统也是可以的,但应该不是常规做法。

相关推荐
胡小禾4 分钟前
ES常识9:如何实现同义词映射(搜索)
java·大数据·elasticsearch
傻傻虎虎14 分钟前
【QT】ModbusTCP读写寄存器类封装
开发语言·数据库·qt
caihuayuan520 分钟前
使用 Java 开发 Android 应用:Kotlin 与 Java 的混合编程
java·大数据·vue.js·spring boot·课程设计
软件开发-NETKF888826 分钟前
JAVA序列化
java
朴素先生在进步41 分钟前
Memory-Based AI Responder: Principles, Skills, and Workflows
java
攒了一袋星辰1 小时前
Spring是如何实现scope作用域支持
java·后端·spring
小黑屋说YYDS1 小时前
Spring Validation校验
java·后端·spring
feiyangqingyun2 小时前
Qt/C++编写音视频实时通话程序/画中画/设备热插拔/支持本地摄像头和桌面
c++·qt·音视频
悟能不能悟2 小时前
Spring Boot多数据源配置的陷阱与终极解决方案
java·数据库·spring boot