当前位置: 首页 > article >正文

_使用CLion的Vcpkg安装SDL2,添加至CMakelists时报错,编译报错

语言:C++20

编译器:gcc 14.2

摘要:初次使用Vcpkg添加SDL2,出现CMakelists找不到错误、编译缺失main错误、运行失败错误。


CMakelists缺失错误:

        使用CLion的Vcpkg安装SDL2时,按照指示把对应代码添加至CMakelists,结果如下图所示报错:

         显示找不到指定的两个cmake文件

        提示给的解决办法是要么设置CMAKE_PREFIX_PATH这个变量,要么设置SDL2_DIR变量。

        但在实测中,真正有效的只有设置CMAKE_PREFIX_PATH变量。设置的位置要与实际Vcpkg里的库安装路径一致。如下图,安装的第三方库的路径,实际是在你安装的Vcpkg目录下的packages目录下(此处我的Vcpkg安装目录就在该项目工程目录下),找到对应的库目录,然后设置目录即可。

set(CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} Vcpkg/packages/sdl2_x64-mingw-dynamic)

        重新cmake一下,即可成功

编译缺失main

        编译时会报错:

        原因是在SDL2中,函数入口是如下签名,需要把int main()改为 int main(int argc, char *argv[])即可

 int main(int argc, char *argv[])

运行失败

        接下来就是运行程序,不出意外的情况下,会出现意外。此处代码表示运行时缺少dll文件

         虽然我已经在CMakelists里加了这一句把SDL2.dll放到了编译的程序所在目录

# 确保 SDL2.dll 复制到输出目录
configure_file(Vcpkg/packages/sdl2_x64-mingw-dynamic/bin/SDL2.dll ${CMAKE_CURRENT_BINARY_DIR}/SDL2.dll COPYONLY)

        但依然会报错,不过由于CLion的提示信息还是有些匮乏,我们可以进入编译的程序目录,然后运行程序。会出现下面错误,没想到缺失的竟然是SDL2d.dll。这是因为此时的CMakelists使用的是Debug构建的,需要匹配的SDL2d.dll,如果是Release版本,那么就是SDL2.dll

    

        根据这个文件可在Vcpkg目录下进行全局搜索,最后找到了这个dll文件,只是没想到出现的位置非常刁钻,分别位于三个不同的目录

        不过显然最后一条路径才是正经路径。然后便是把路径添加上去

configure_file(Vcpkg/packages/sdl2_x64-mingw-dynamic/bin/SDL2.dll ${CMAKE_CURRENT_BINARY_DIR}/SDL2.dll COPYONLY)
configure_file(Vcpkg/packages/sdl2_x64-mingw-dynamic/debug/bin/SDL2d.dll ${CMAKE_CURRENT_BINARY_DIR}/SDL2d.dll COPYONLY)

如此便可正常运行


http://www.kler.cn/a/468264.html

相关文章:

  • TDengine + MQTT :车联网时序数据库如何高效接入
  • C++ static关键字(八股总结)
  • axios和fetch的实现原理以及区别,与XMLHttpRequest的关系,并结合react封装统一请求示例
  • 【Redis经典面试题七】Redis的事务机制是怎样的?
  • 倍思氮化镓充电器分享:Super GaN伸缩线快充35W
  • 【可实战】测试用例组成、用例设计方法、用例编写步骤、测试用例粒度、用例评审(包含常见面试题)
  • [CTF/网络安全] 攻防世界 Training-WWW-Robots 解题详析
  • MySQL 【多表查询】
  • ppt pptx转成pdf有什么好的java工具
  • 车载通信架构 --- 智能汽车通信前沿技术
  • 2024 年 docker 提示index.docker.io
  • android基础之Lambda表达式的详细说明
  • 米哈游可切换角色背景动态壁纸
  • Tensflow 安装方法以及报错解决方案
  • Spring中WebSocket的使用
  • ACL---访问控制列表---策略
  • Pandas-timestamp和datetime64的区别
  • EF Core配置及使用
  • Tailwind CSS 实战:响应式导航栏设计与实现
  • asp.net core Web Api中的数据绑定
  • STM32F103 MCU 上电启动流程分析实现
  • 从 TiDB 学习分布式数据库测试
  • 构建JS全栈开发的CMS系统——从零开始搭建前后端
  • kafka使用常见问题
  • 【机器学习篇】交通革命:机器学习如何引领未来的道路创新
  • 仓颉笔记——windows11安装启用cangjie语言,并使用vscode编写“你好,世界”