与 VS2017 和 FFMPEG 4 完全矛盾的未解决的外部符号 + 未使用的库
Posted
技术标签:
【中文标题】与 VS2017 和 FFMPEG 4 完全矛盾的未解决的外部符号 + 未使用的库【英文标题】:Contradictory unresolved external symbol + unused library altogether with VS2017 and FFMPEG 4 【发布时间】:2018-08-03 11:45:04 【问题描述】:我在 Windows 中有一个带有 FFmpeg 4.0.2 的小型 c++ 项目。但是,我有一个奇怪的问题:我在 x64 中编译,有 x64 库,并且有正确的链接输入,但是我在链接器中同时得到了 LNK2019 error
AND “未使用的库”输出/VERBOSE
:
1>Unused libraries:
1> I:\lib\ffmpeg-4.0.2-win64\lib\\avcodec.lib
1> I:\lib\ffmpeg-4.0.2-win64\lib\\avutil.lib
我手动检查了 lib 文件是 x64。 I:\lib\ffmpeg-4.0.2-win64\lib\
在 LIBPATH 中。
与 ICC 的症状相同。
怎么会这样?
【问题讨论】:
这可能是由于路径中的双反斜杠造成的吗? 【参考方案1】:要在 C++ 程序中包含 ffmpeg 的标头,您必须考虑到 ffmpeg 使用 C 调用约定。否则,您的链接器将期望 C++ 名称对函数名称进行修改。但是,由于 ffmpeg 是纯 C 语言,因此您必须告诉您编译器这一点。
例如,如果您在程序中包含avformat.h
,请按以下方式操作。
#ifdef __cplusplus
extern "C"
#endif
#include <avformat.h>
#include <avcodec.h>
#include <avutil.h>
#ifdef __cplusplus
#endif
其他 ffmpeg 头文件也是如此。
【讨论】:
不应该有两个#ifdef#endif
,一个用于开头
,一个用于结尾
吗?
@Scheff @solei,你说得对,应该有两个 #ifdef
#endif
对。在答案中修复了这个问题。以上是关于与 VS2017 和 FFMPEG 4 完全矛盾的未解决的外部符号 + 未使用的库的主要内容,如果未能解决你的问题,请参考以下文章
Linux - ffmpeg 3.4.6 与 4.2.1 - 带有 Tee(记录和流)的 bash 脚本在旧版本中运行得很好 - 新版本需要改变啥?