当前位置:   article > 正文

Vscode C++的基础配置文件以及无法产生可编译文件exe的处理方法(undefined reference)_vscode编译c++文件无法生成exe

vscode编译c++文件无法生成exe

采用排除法:

1.是否将工作文件夹添加工作区?

打开vscode -》 文件 -》 打开文件夹 -》文件 -》将文件夹添加工作区(或者另存为一个),把工作区文件放到工作文件夹里。

如下:Manager.code-workspace

工作区结构:.vscode文件夹装配置文件,.code-workspace工作区,ManagerSys.h类的声明,ManagerSys.cpp类成员函数(方法)的定义,ManagerSystemMain.cpp主程序


2.基础文件配置?

电脑上编译器是下载的MinGW里面的g++,保存位置在D:/Mingw/mingw64/bin/g++.exe

2.1 配置c_cpp_properties.json文件:

includePath是包含头文件的路径,需要把当前工作文件夹路径加入进去,例如此处添加就是Manager那个路径。

每个工作文件都需要增加自己的

  1. {
  2. "configurations": [
  3. {
  4. "name": "Win32",
  5. "includePath": [
  6. "${workspaceFolder}/**",
  7. "D:/Mingw/mingw64/include/**",
  8. "D:/Mingw/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/**",
  9. "D:/Mingw/mingw64/lib/gcc/x86_64-w64-mingw32/8.1.0/include/c++/backward/**",
  10. "D:/Mingw/mingw64/include",
  11. "C:/Users/YHW/Desktop/Ctest/**",
  12. "C:/Users/YHW/Desktop/Manager/**"
  13. ],
  14. "defines": [
  15. "_DEBUG",
  16. "UNICODE",
  17. "_UNICODE"
  18. ],
  19. "compilerPath": "D:\\Mingw\\mingw64\\bin\\g++.exe",
  20. "cStandard": "c89",
  21. "cppStandard": "gnu++98",
  22. "intelliSenseMode": "windows-gcc-x64"
  23. }
  24. ],
  25. "version": 4
  26. }

2.2 配置launch.json文件:这是为了调试的配置

  1. {
  2. // 使用 IntelliSense 了解相关属性。
  3. // 悬停以查看现有属性的描述。
  4. // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
  5. "version": "0.2.0",
  6. "configurations": [
  7. {
  8. "name": "gdb 启动器", //随便
  9. "type": "cppdbg",
  10. "request": "launch",
  11. "program": "${workspaceFolder}/${fileBasenameNoExtension}.exe",
  12. "args": [],
  13. "stopAtEntry": false,
  14. "cwd": "${workspaceFolder}",
  15. "environment": [],
  16. "externalConsole": false,
  17. "MIMode": "gdb",
  18. "miDebuggerPath": "D:\\Mingw\\mingw64\\bin\\gdb.exe",
  19. "preLaunchTask": "g++", // prelaunch作用是进行编译
  20. "setupCommands": [
  21. {
  22. "description": "为 gdb 启用整齐打印",
  23. "text": "-enable-pretty-printing",
  24. "ignoreFailures": true
  25. }
  26. ]
  27. }

2.3 配置task.json文件:

配置task文件的时候就会出现不同:因为vscode不像VS那样直接就对于工程文件编译,vscode需要在配置中加上链接,通知编译器文件的联系。

注意自己文件和文件夹的名称

第一种情况:只需要编译通过单个cpp文件,其他cpp文件不需要同时编译

  1. {
  2. // See https://go.microsoft.com/fwlink/?LinkId=733558
  3. // for the documentation about the tasks.json format
  4. "version": "2.0.0",
  5. "tasks": [
  6. {
  7. "type": "cppbuild", //任务类型
  8. "label": "g++", //任务名称,不建议改
  9. "command": "D:/Mingw/mingw64/bin/g++.exe", //C++和g++,c是gcc
  10. "args": [
  11. "-g",
  12. //"${workspaceFolder}\\ManagerSys.cpp",
  13. "${file}", //指定编译当前文件
  14. "-o",
  15. "${fileDirname}\\${fileBasenameNoExtension}.exe",
  16. ],
  17. "options": {
  18. "cwd": "D:\\Mingw\\mingw64\\bin\\"
  19. },
  20. "problemMatcher": [
  21. "$gcc"
  22. ],
  23. "group": {
  24. "kind": "test", //表示这一组任务的目标,可以换成build
  25. "isDefault": true
  26. },
  27. "detail": "D:/Mingw/mingw64/bin/g++.exe"
  28. }
  29. ]
  30. }

编译时只对目标文件调试即可。(绿色的小箭头开始编译)

 第二种情况:需要编译通过所有cpp文件

 此时task文件需要更改为:

  1. {
  2. // See https://go.microsoft.com/fwlink/?LinkId=733558
  3. // for the documentation about the tasks.json format
  4. "version": "2.0.0",
  5. "tasks": [
  6. {
  7. "type": "cppbuild",
  8. "label": "g++",
  9. "command": "D:/Mingw/mingw64/bin/g++.exe",
  10. "args": [
  11. "-g",
  12. "${workspaceFolder}\\*.cpp", //多文件一起编译
  13. "-o",
  14. "${fileDirname}\\${fileBasenameNoExtension}.exe",
  15. ],
  16. "options": {
  17. "cwd": "D:\\Mingw\\mingw64\\bin\\"
  18. },
  19. "problemMatcher": [
  20. "$gcc"
  21. ],
  22. "group": {
  23. "kind": "test",
  24. "isDefault": true
  25. },
  26. "detail": "D:/Mingw/mingw64/bin/g++.exe"
  27. }
  28. ]
  29. }

tasks.json文件中的args参数,实际上就是调用gcc时,后面所跟的参数在初始的配置中,实际上编译器执行的命令为gcc -g XXX.cpp -o XXX.exe,而修改后的配置中,执行的命令是gcc -g XXX.cpp XX.c -o XXX.exe,这是由于参数${file}代表的是被编译的当前文件,而参数${workspaceFolder}\\*.cpp代表的是当前目录下的所有.cpp文件
 

到此结束。


3、错误排除

出现“undefined reference”这种问题

在这里插入图片描述

两种可能:

1.点一下runCode的播放按钮,看看有没有产生exe文件

 2.上面的文件配置是否正确,更改完重启vscode,开始调试。

如果是多文件同时编译,只需要点Main函数的调试步骤即可,头文件和类的声明不需要。

成功之后如图

3.虚构函数导致的内存溢出

出现的是undefined reference: classtest::~classtest,说明基类虚构函数不是虚函数,要加virtual;

或者直接注释掉虚构函数,最后再来调试.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/651711
推荐阅读
相关标签
  

闽ICP备14008679号