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

相关推荐
lexiangqicheng几秒前
1,自定义表单通俗理解-PC设计APP渲染
java·前端·javascript
南极企鹅9 分钟前
生产环境gc文件分析
java·jvm·算法
Wang's Blog10 分钟前
Java 项目实战: 交友项目 - 前后端分离的工程实践
java·spring cloud·架构
溪语流沙19 分钟前
面试加分项!Manacher:O(n)求最长回文子串的对称之美
java·python·leetcode·面试·职场和发展
知守观20 分钟前
Maven SNAPSHOT 更新排查:-U 无效、clean 无用,问题在 _remote.repositories(附完整链路)
java·后端·maven
牛战士coding21 分钟前
从一句\“取消订单\“到退款通知:AI 写操作完整业务闭环
java·人工智能
啵啵啵鱼22 分钟前
第三章 栈、队列和数组相关结构
java·数据结构·栈·队列
瑶山24 分钟前
stable-diffusion.cpp 参数全集整理(sd-cli.exe / sd-server.exe)
java·数据库·stable diffusion·参数全集
CallFay云起未来25 分钟前
2026年AI客服能不能减少人工回复?从知识检索到人机协同的技术实现
java·大数据·前端·人工智能·架构·文心一言