Windows平台下Vscode+CMake使用FFMpeg和SDL2的库---问题记录

引言:

        小白打算在Windows平台下用Vscode引入第三方的FFMpeg、SDL2的动态库(即.dll、.lib),制作一个简易的音、视频播放器,项目的构建用CMake插件实现(不喜欢C++插件的三个.json配置文件,试了一下感觉好麻烦,而且CMake可以跨平台,方便后续在其它平台快速入门项目构建)。

        构建过程中在链接阶段遇到了问题,花了不少时间才解决。当时在网上搜索的时候基本上都是关于VS相关问题的回答,关于VC的很少,因此发此文看看能不能帮助到未来遇到类似问题的朋友。

遇到的问题:

        ***.obj : error LNK2019:无法解析的外部符号 _av_malloc,函数 _main 中引用了该符号

        类似错误往下还有几十项。

问题分析:

        已经得到了目标文件,但是在链接阶段无法定位到av_malloc()函数实现的位置,即lib库链接出错了。

        网上大部分的回答是路径错误,或是dll、lib、.h文件的版本不一致所致,但经排查后确定不是这些原因。实际原因为构建工具包系统版本 与 lib文件系统版本不一致所致,从官网下载得到的lib版本为x64版本,而我使用的工具包为MSVCx86版本(),因此链接阶段出现了问题(但我不明白为什么直到链接阶段才出了问题)。

解决方法:

       很简单,工具包换成x64版本的就行了,我的选择是MinGW-w64。 

CMakeList.txt:

cmake_minimum_required(VERSION 3.20.0)

# 项目名称
project(ChuVideoPlayer VERSION 0.1.0 LANGUAGES C CXX)

set(EXECUTABLE_OUTPUT_PATH ${CMAKE_SOURCE_DIR}/bin)
# 设置可执行文件的输出路径

add_executable(ChuVideo ffmpeg_ChuPlayer.cpp)
# 创建可执行文件

target_include_directories(ChuVideo PUBLIC ${CMAKE_SOURCE_DIR}/inc)
# 向编译目标提供头文件路径                (PS:对比include_directories的全局目标添加,这个可以选择单一目标添加)

target_link_directories(ChuVideo PUBLIC ${CMAKE_SOURCE_DIR}/lib)
# 向目标提供库文件的路径

target_link_libraries(ChuVideo PUBLIC 
 avcodec.lib
 avformat.lib
 avutil.lib
 swscale.lib
 SDL2.lib
)# 向目标提供需要链接的库文件名(可以不写.lib,我只是强调是lib库)

思路提供:无法解析的外部符号解决方法汇总

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值