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

相关推荐
胚芽鞘68132 分钟前
关于java项目中maven的理解
java·数据库·maven
岁忧1 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
CJi0NG1 小时前
【自用】JavaSE--算法、正则表达式、异常
java
Hellyc2 小时前
用户查询优惠券之缓存击穿
java·redis·缓存
今天又在摸鱼2 小时前
Maven
java·maven
老马啸西风2 小时前
maven 发布到中央仓库常用脚本-02
java·maven
代码的余温2 小时前
MyBatis集成Logback日志全攻略
java·tomcat·mybatis·logback
哈市雪花4 小时前
相机:以鼠标点为中心缩放(使用OpenGL+QT开发三维CAD)
qt·相机·opengl·cad·缩放·工业软件·渲染效果
一只叫煤球的猫4 小时前
【🤣离谱整活】我写了一篇程序员掉进 Java 异世界的短篇小说
java·后端·程序员
斐波娜娜4 小时前
Maven详解
java·开发语言·maven