基于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系统也是可以的,但应该不是常规做法。

相关推荐
迷藏4943 小时前
**发散创新:基于角色与属性的混合权限模型在微服务架构中的实战落地**在现代分布式系统中,
java·python·微服务·云原生·架构
码以致用3 小时前
Java垃圾回收器笔记
java·jvm·笔记
暴力袋鼠哥3 小时前
基于springboot与vue的ai多模态数据展示看板
java·spring boot
用户8307196840823 小时前
VS Code Java开发配置与使用经验分享
java·visual studio code
立莹Sir3 小时前
云原生全解析:从概念到实践,Java技术栈如何拥抱云原生时代
java·开发语言·云原生
程序员老邢3 小时前
【技术底稿 12】内网统一日志系统 Loki + Promtail 全流程部署(对接 Grafana,监控日志一体化)
java·运维·程序人生·grafana·devops
银河系的一束光3 小时前
使用 IntelliJ IDEA 开发 Java 程序时 , 会遇到以下中文乱码问题 :
java·ide·intellij-idea
Via_Neo3 小时前
判断字符串前缀(26年蓝桥杯JAVA B组)
java·职场和发展·蓝桥杯
XiYang-DING3 小时前
【Java】从源码深入理解HashMap和TreeMap
java·开发语言