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

相关推荐
夏幻灵2 分钟前
JAVA基础-就近原则和this关键字
java·开发语言
蜀中孤鹰3 分钟前
使用gson定制化序列化/反序列化
java·json
zhaokuner8 分钟前
08-仓储与映射-DDD领域驱动设计
java·开发语言·设计模式·架构
微露清风12 分钟前
系统性学习C++进阶-第十五讲-map和set的使用
java·c++·学习
一起养小猫20 分钟前
LeetCode100天Day9-无重复字符的最长子串与赎金信
java·开发语言·数据结构·leetcode
筏.k22 分钟前
FFmpeg 视频解码进阶:H264_CUVID 硬解码器简单示例
ffmpeg·音视频
菩提祖师_26 分钟前
基于Java的物联网智能交通灯控制系统
java·开发语言·物联网
公众号:ITIL之家31 分钟前
服务价值体系重构:在变化中寻找不变的运维本质
java·运维·开发语言·数据库·重构
自在极意功。35 分钟前
Spring 中 Bean 的生命周期
java·spring·bean生命周期
zhaokuner37 分钟前
01-领域与问题空间-DDD领域驱动设计
java·开发语言·设计模式·架构