鱼C论坛

 找回密码
 立即注册
查看: 1338|回复: 4

[已解决]怎么构建VSCode+MinGW+SFML环境

[复制链接]
发表于 2023-7-22 18:24:41 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 hellomyprogram 于 2023-7-22 18:51 编辑

我在按照网上的教程构建完环境之后,运行时遇到了这样的问题:
  1. D:/NoSpacePrograms/MinGW/bin/g++.exe -fdiagnostics-color=always -g "项目目录/*.cpp" -o "项目目录/.vscode/program.exe" -I D:/NoSpacePrograms/MinGW-SFML/include -lsfml-graphics -lsfml-system -lsfml-window
  2. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-graphics.a when searching for -lsfml-graphics
  3. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib\libsfml-graphics.a when searching for -lsfml-graphics
  4. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/../lib/libsfml-graphics.a when searching for -lsfml-graphics
  5. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/../lib\libsfml-graphics.a when searching for -lsfml-graphics
  6. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-graphics.a when searching for -lsfml-graphics
  7. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib\libsfml-graphics.a when searching for -lsfml-graphics
  8. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-graphics.a when searching for -lsfml-graphics
  9. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/../lib/libsfml-graphics.a when searching for -lsfml-graphics
  10. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-graphics.a when searching for -lsfml-graphics
  11. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lsfml-graphics
  12. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-system.a when searching for -lsfml-system
  13. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib\libsfml-system.a when searching for -lsfml-system
  14. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/../lib/libsfml-system.a when searching for -lsfml-system
  15. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/../lib\libsfml-system.a when searching for -lsfml-system
  16. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-system.a when searching for -lsfml-system
  17. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib\libsfml-system.a when searching for -lsfml-system
  18. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-system.a when searching for -lsfml-system
  19. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/../lib/libsfml-system.a when searching for -lsfml-system
  20. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-system.a when searching for -lsfml-system
  21. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -lsfml-system
  22. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-window.a when searching for -lsfml-window
  23. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib\libsfml-window.a when searching for -lsfml-window
  24. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/../lib/libsfml-window.a when searching for -lsfml-window
  25. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/../lib\libsfml-window.a when searching for -lsfml-window
  26. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-window.a when searching for -lsfml-window
  27. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib\libsfml-window.a when searching for -lsfml-window
  28. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-window.a when searching for -lsfml-window
  29. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/../lib/libsfml-window.a when searching for -lsfml-window
  30. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-window.a when searching for -lsfml-window
  31. D:/NoSpacePrograms/MinGW/bin/../lib/gcc/x86_64-w64-mingw32/7.3.0/../../../../x86_64-w64-mingw32/bin/ld.exe: [b]cannot find -lsfml-window
  32. collect2.exe: error: ld returned 1 exit status
复制代码

我的MinGW版本为7.3.0,SFML为2.5.1。
以下是我按照网上教程构建的时候创建的“c_cpp_properties.json”文件:
  1. {
  2.     "configurations": [
  3.         {
  4.             "name": "Win32",
  5.             "includePath": [
  6.                 "${workspaceFolder}/**",
  7.                 "D:/NoSpacePrograms/MinGW/include",
  8.                 "D:/NoSpacePrograms/MinGW-SFML/include"
  9.             ],
  10.             "defines": [
  11.                 "_DEBUG",
  12.                 "UNICODE",
  13.                 "_UNICODE"
  14.             ],
  15.             "compilerPath": "D:/NoSpacePrograms/MinGW/bin/gcc.exe",
  16.             "cStandard": "c17",
  17.             "cppStandard": "gnu++14",
  18.             "intelliSenseMode": "windows-gcc-x64"
  19.         }
  20.     ],
  21.     "version": 4
  22. }
复制代码

还有“tasks.json”文件:
  1. {
  2.     "tasks": [
  3.         {
  4.             "type": "cppbuild",
  5.             "label": "C/C++: gcc.exe 生成活动文件",
  6.             "command": "D:/NoSpacePrograms/MinGW/bin/g++.exe",
  7.             "args": [
  8.                 "-fdiagnostics-color=always",
  9.                 "-g",
  10.                 "${fileDirname}/*.cpp",
  11.                 "-o",
  12.                 "${fileDirname}/.vscode/program.exe",
  13.                 "-I",
  14.                 "D:/NoSpacePrograms/MinGW-SFML/include",
  15.                 "-lsfml-graphics",
  16.                 "-lsfml-system",
  17.                 "-lsfml-window"
  18.             ],
  19.             "options": {
  20.                 "cwd": "D:/NoSpacePrograms/MinGW/bin"
  21.             },
  22.             "problemMatcher": [
  23.                 "$gcc"
  24.             ],
  25.             "group": {
  26.                 "kind": "build",
  27.                 "isDefault": true
  28.             },
  29.             "detail": "调试器生成的任务。"
  30.         }
  31.     ],
  32.     "version": "2.0.0"
  33. }
复制代码

VSCode并没有对我的这行代码进行警告,但是编译器产生的错误指向了这一行代码:
  1. #include <SFML/Graphics.hpp>
复制代码

我已经向用户环境变量PATH添加了MinGW和SFML的bin路径,向用户环境变量CPLUS_INCLUDE_PATH和LIBRARY_PATH分别添加了SFML的include路径和lib路径。
错误信息似乎提到不存在-lsfml之类的参数,但是网上的教程都是加了这些参数的,去掉参数照样报错。
根据“skipping incompatible”一则消息,编译器似乎觉得SFML的源文件是不可取的。
我参考的教程是
  1. https:// www .xjx100.cn/news/435339.html
复制代码
最佳答案
2023-7-22 19:13:25
看起来你遇到的问题是由于链接器找不到与你的 MinGW 环境兼容的 SFML 库文件。你需要确保下载的 SFML 版本与你的 MinGW 的架构(32位或64位)和版本匹配。如果 MinGW 是64位的,那么 SFML 库也必须是64位的。反之亦然,如果你的 MinGW 是32位的,你需要使用32位的 SFML 库。

你可以按照以下步骤进行操作:

1. 首先,确定你的 MinGW 是32位还是64位。你可以通过在终端中运行  gcc -v  来查看。在最后一行,如果看到 "Target: x86_64-w64-mingw32",那么你的 MinGW 是64位的。如果看到 "Target: i686-w64-mingw32",那么你的 MinGW 是32位的。

2. 一旦你知道了 MinGW 的架构,你就可以下载相应版本的 SFML 库。你可以从 SFML 官方网站的下载页面下载。确保选择的 SFML 库与你的 MinGW 架构匹配。

3. 下载并解压 SFML 库后,将其复制到你的 MinGW 安装目录中。例如,如果你的 MinGW 安装在 "D:/NoSpacePrograms/MinGW",你可以将 SFML 库复制到 "D:/NoSpacePrograms/MinGW-SFML"。

4. 在你的 "tasks.json" 文件中,确保  -lsfml-graphics , -lsfml-system  和  -lsfml-window  参数出现在链接器参数列表的最后。链接器参数应该如下所示:
   
  1. {
  2.     "type": "cppbuild",
  3.     "label": "C/C++: gcc.exe 生成活动文件",
  4.     "command": "D:/NoSpacePrograms/MinGW/bin/g++.exe",
  5.     "args": [
  6.         "-fdiagnostics-color=always",
  7.         "-g",
  8.         "${fileDirname}/*.cpp",
  9.         "-o",
  10.         "${fileDirname}/.vscode/program.exe",
  11.         "-I",
  12.         "D:/NoSpacePrograms/MinGW-SFML/include",
  13.         "-L",
  14.         "D:/NoSpacePrograms/MinGW-SFML/lib",
  15.         "-lsfml-graphics",
  16.         "-lsfml-window",
  17.         "-lsfml-system"
  18.     ],
  19.     ...
  20. }
复制代码

在这里, -L  参数指定了库文件的路径, -l  参数告诉链接器链接哪些库。

5. 最后,确保你的项目中包含了 SFML 的头文件,并且你正确地使用了 SFML 的命名空间和类。例如:

  1. #include <SFML/Graphics.hpp>

  2. int main() {
  3.     sf::RenderWindow window(sf::VideoMode(800, 600), "My window");
  4.     // ...
  5.     return 0;
  6. }
复制代码


希望这些信息对你有所帮助,如果你还有其他问题,欢迎继续提问。

评分

参与人数 1贡献 +3 收起 理由
歌者文明清理员 + 3 升级

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-7-22 19:00:57 | 显示全部楼层
从错误信息来看,编译器在链接阶段找不到SFML的库文件。这可能是因为你使用的MinGW和SFML版本不兼容导致的。

首先,请确保你下载并安装了与你的MinGW版本兼容的SFML库。例如,对于MinGW 7.3.0,你需要下载SFML 2.5.1 for MinGW 7.3.0。确保你的SFML库文件是与你的MinGW版本匹配的。

接下来,检查一下你的环境变量设置是否正确。确保将SFML库的bin路径添加到系统的PATH环境变量中。

另外,在你的"tasks.json"文件中,尝试将"-lsfml-graphics"、"-lsfml-system"和"-lsfml-window"这些参数改成具体的库文件路径,而不是使用"-l"选项。例如:


  1. "args": [
  2.     "-fdiagnostics-color=always",
  3.     "-g",
  4.     "${fileDirname}/*.cpp",
  5.     "-o",
  6.     "${fileDirname}/.vscode/program.exe",
  7.     "-I",
  8.     "D:/NoSpacePrograms/MinGW-SFML/include",
  9.     "D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-graphics.a",
  10.     "D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-system.a",
  11.     "D:/NoSpacePrograms/MinGW-SFML/lib/libsfml-window.a"
  12. ]
复制代码


请根据你实际安装SFML的路径进行修改。

最后,保存并重新运行你的程序。如果问题仍然存在,请检查编译器输出的详细错误信息,看看是否有其他引起链接问题的原因。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-22 19:13:25 | 显示全部楼层    本楼为最佳答案   
看起来你遇到的问题是由于链接器找不到与你的 MinGW 环境兼容的 SFML 库文件。你需要确保下载的 SFML 版本与你的 MinGW 的架构(32位或64位)和版本匹配。如果 MinGW 是64位的,那么 SFML 库也必须是64位的。反之亦然,如果你的 MinGW 是32位的,你需要使用32位的 SFML 库。

你可以按照以下步骤进行操作:

1. 首先,确定你的 MinGW 是32位还是64位。你可以通过在终端中运行  gcc -v  来查看。在最后一行,如果看到 "Target: x86_64-w64-mingw32",那么你的 MinGW 是64位的。如果看到 "Target: i686-w64-mingw32",那么你的 MinGW 是32位的。

2. 一旦你知道了 MinGW 的架构,你就可以下载相应版本的 SFML 库。你可以从 SFML 官方网站的下载页面下载。确保选择的 SFML 库与你的 MinGW 架构匹配。

3. 下载并解压 SFML 库后,将其复制到你的 MinGW 安装目录中。例如,如果你的 MinGW 安装在 "D:/NoSpacePrograms/MinGW",你可以将 SFML 库复制到 "D:/NoSpacePrograms/MinGW-SFML"。

4. 在你的 "tasks.json" 文件中,确保  -lsfml-graphics , -lsfml-system  和  -lsfml-window  参数出现在链接器参数列表的最后。链接器参数应该如下所示:
   
  1. {
  2.     "type": "cppbuild",
  3.     "label": "C/C++: gcc.exe 生成活动文件",
  4.     "command": "D:/NoSpacePrograms/MinGW/bin/g++.exe",
  5.     "args": [
  6.         "-fdiagnostics-color=always",
  7.         "-g",
  8.         "${fileDirname}/*.cpp",
  9.         "-o",
  10.         "${fileDirname}/.vscode/program.exe",
  11.         "-I",
  12.         "D:/NoSpacePrograms/MinGW-SFML/include",
  13.         "-L",
  14.         "D:/NoSpacePrograms/MinGW-SFML/lib",
  15.         "-lsfml-graphics",
  16.         "-lsfml-window",
  17.         "-lsfml-system"
  18.     ],
  19.     ...
  20. }
复制代码

在这里, -L  参数指定了库文件的路径, -l  参数告诉链接器链接哪些库。

5. 最后,确保你的项目中包含了 SFML 的头文件,并且你正确地使用了 SFML 的命名空间和类。例如:

  1. #include <SFML/Graphics.hpp>

  2. int main() {
  3.     sf::RenderWindow window(sf::VideoMode(800, 600), "My window");
  4.     // ...
  5.     return 0;
  6. }
复制代码


希望这些信息对你有所帮助,如果你还有其他问题,欢迎继续提问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-22 22:06:31 | 显示全部楼层
isdkz 发表于 2023-7-22 19:13
看起来你遇到的问题是由于链接器找不到与你的 MinGW 环境兼容的 SFML 库文件。你需要确保下载的 SFML 版本 ...

ChatGPT还是有点用的(
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-7-23 22:33:08 | 显示全部楼层
hellomyprogram 发表于 2023-7-22 22:06
ChatGPT还是有点用的(

小甲鱼有教程
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-31 12:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表