【转】vscode下编译告警“undefined reference”?三步教你如何解决

转自:vscode下编译告警“undefined reference”?三步教你如何解决_squall0984的博客-CSDN博客


 

近些年来,由于VS Studio体积庞大、价格昂贵等原因,越来越多的C/C++开发者转投VSCode的怀抱。VSCode有着免费1、开源2、多平台支持、占用系统3资源少、插件丰富、界面美观等诸多特点。对于初学者来说,是非常方便使用的IDE。许多同学在使用VSCode时,在同一文件夹下,存在多个文件时,编译器无法找到引用的.h文件定义的问题,通过简单几步配置,即可此解决问题。

  1. 问题描述
  • 打开TEST文件夹,创建hello.c, hello.h文件,

在这里插入图片描述

hello.c

#include <stdio.h>void hello()
{printf("hello\n");
}

hello.h

#ifndef __HELLO_H__
#define __HELLO_H__extern void hello();#endif
  • 创建main.c

在这里插入图片描述
main.c

#include "hello.h"void main()
{hello();
}
  • 选择main.c,Run->Start Debugging,会出现编译器报错“undefined reference to `hello’”
    在这里插入图片描述
    出现此问题的原因,是编译器仅编译了main.c文件,而未编译hello.c文件。
  1. 解决方法
  • 在VSCode工程界面中,按压Ctrl+Shift+p,在弹出的输入框中,输入Tasks后,从提示选单中选择Configure Task,再选择C/C++:gcc.exe build active file

在这里插入图片描述
在这里插入图片描述

  • 此时,.VSCode目录下会生成tasks.json文件

在这里插入图片描述

tasks.json

{"version": "2.0.0","tasks": [{"type": "shell","label": "C/C++: gcc.exe build active file","command": "D:\\Program Files\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin\\gcc.exe","args": ["-g","${file}","-o","${fileDirname}\\${fileBasenameNoExtension}.exe"],"options": {"cwd": "D:\\Program Files\\mingw-w64\\x86_64-8.1.0-win32-seh-rt_v6-rev0\\mingw64\\bin"},"problemMatcher": ["$gcc"],"group": "build"}]
}
  • 将args参数中的${file}修改为${fileDirname}\\*.c,再次执行Run->Start Debugging,可以看到终端中成功的显示了"hello"字符
    在这里插入图片描述
  1. 问题原因

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

同时,在此附上.json文件中,各变量名所代表的含义,共参考,查看来源。

变量名含义
${workspaceRoot}当前打开的文件夹的绝对路径+文件夹的名字
${workspaceRootFolderName}当前打开的文件夹的名字
${file}当前打开正在编辑的文件名,包括绝对路径,文件名,文件后缀名
${relativeFile}从当前打开的文件夹到当前打开的文件的路径,如当前打开的是test文件夹,当前的打开的是main.c,并有test/first/second/main.c 那么此变量代表的是 first / second / main.c
${fileBasename}当前打开的文件名+后缀名,不包括路径
${fileBasenameNoExtension}当前打开的文件的文件名,不包括路径和后缀名
${fileDirname}当前打开的文件所在的绝对路径,不包括文件名
${fileExtname}当前打开的文件的后缀名
${cwd}任务开始运行时的当前工作目录
${lineNumber}前打开的文件,光标所在的行数

  1. VSCode使用的是 MIT Lisense, 可随意下载, 分发, 商用等. 点击下载 ↩︎

  2. github可直接看到源码, 点击查看,开源让更多开发者参与进来, 集思广益, 推动这款优秀的 IDE 发展. ↩︎

  3. 下载vscode 1.29.0, 只有 44 MB 大小,安装完约 189 MB。内存上, 相对于 eclipse, vscode 占用内存更少. eclipse 约占用 478 MB(1 个进程), vscode 约共占用 200 MB(6 个进程). ↩︎

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435802.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

写在S3C2440A平台+winCE5.0+NAND +HIVE注册表的实现

最近一直弄这个注册表的永久保存&#xff0c;在网上看到很多相关的贴子&#xff0c;就像大部分人说的一样&#xff0c;很少有人照着做就可以成功的。 今天总算成功了&#xff0c;总结经验如下&#xff0c;但愿对后来者有所帮助。 首先&#xff0c;要实现注册表的永久保存&…

非常实用的Asp.net常用的51个代码

1.弹出对话框.点击转向指定页面 Code: Response.Write("<script>window.alert(该会员没有提交申请,请重新提交&#xff01;)</script>");Response.Write("<script>window.location http://www.msproject.cn/index.asp</script>");…

【转】VScode tasks.json和launch.json的设置

转自&#xff1a;VScode tasks.json和launch.json的设置 - 知乎 目录 C&#xff08;方法1&#xff1a;不使用VSCode插件&#xff0c;较繁琐&#xff09;C&#xff08;方法2&#xff1a;使用Native Debug插件&#xff09;C&#xff08;方法3&#xff1a;使用C/C Compile Run插…

小处见大问题

如果有以下几种很简单的需求&#xff0c;可是小需要中隐藏着大问题。 给页面添加4个web按钮&#xff0c;点击4个按钮分别实现 &#xff08;1&#xff09;打开一个摸态对话框 &#xff08;2&#xff09;页面在客户端转向 &#xff08;3&#xff09;页面转向并且进行一个服务器端…

巧手定制Windows CE系统

嵌入式系统正在日益广泛的应用于各个方面&#xff0c;嵌入式系统的最大特点在于其精简和实时性。公司近期委派我负责一个新的嵌入式系统项目&#xff0c;因为是小型设备&#xff0c;所以我面临的第一个难题是需要找一个体积少&#xff0c;但非常灵活添加外围接口的嵌入式系统。…

【转】vscode配置C/C++环境

转自&#xff1a;vscode配置C/C环境 - 知乎 VS Code配置作者&#xff1a;谭九鼎 链接&#xff1a;Visual Studio Code 如何编写运行 C、C 程序&#xff1f; - 知乎 有改动。个人按照步骤后&#xff0c;做到复制上三个json那一步&#xff0c;就可以运行了。 我将settings.json…

Boot Loader的启动流程和开发经验总结

Windows CE最大程度继承了桌面版Windows的丰富功能&#xff0c;但是Windows CE并不是一个通用的安装版操作系统。在形形色色的嵌入式设备世界里&#xff0c;一款CE系统通常只会针对某一种硬件平台生成。 一般来说&#xff0c;Windows CE的开发过程可以分为&#xff1a;0AL…

c# 相对路径的一些文献

1.获取和设置当前目录的完全限定路径。string str System.Environment.CurrentDirectory;Result: C:\xxx\xxx2.获取启动了应用程序的可执行文件的路径&#xff0c;不包括可执行文件的名称。string str System. Windows .Forms.Application.StartupPath;Result: C:\xxx\xxx3.获…

【转】dicom网络通讯入门(1)

转自&#xff1a;dicom网络通讯入门&#xff08;1&#xff09; - assassinx - 博客园 如果只看标准就会越看越糊涂&#xff0c;根本原因就是因为dicom抽象得太严重&#xff0c;是“专家”弄的。没办法。 那么到底服务类是什么&#xff1f;sop 又是什么&#xff1f;&#xff0…

三种嵌入式操作系统的分析与比析

1.1 嵌入式系统 嵌入式系统是以嵌入式计算机为技术核心&#xff0c;面向用户、面向产品、面向应用&#xff0c;软硬件可裁减的&#xff0c;适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。 嵌入式系统应具有的特点是&#xff1a;高可靠性&#…

用WebORB实现flex + .net后台的Remoting

实现flex与后台通信最简单的方式是采用httpServic的方式&#xff0c;或webservice。但这两种方式都是基于文本的传输&#xff0c;传输效率低&#xff0c;采用RemoteObject的方式&#xff0c;传输的内容采用AMF3格式的二进制编码&#xff0c;效率较高&#xff0c;并且能实现远程…

【转】dicom网络通讯入门(2)

转自&#xff1a;dicom网络通讯入门&#xff08;2&#xff09; - assassinx - 博客园 首先我们现一个echo响应测试工具&#xff0c;也就是echo 的scu&#xff0c;不是实现打印作业管理么。同学我告诉你还早着呢。本来标题取的就是《dicomviewer 第二弹 之 实现打印管理》名字多…

基于WINCE6.0下载multiple XIP镜像文件

备注&#xff1a;基于usb下载的方式&#xff0c;MLC nand flash为K9G8G08U 1. Multiple XIP模式的文件说明 Multiple XIP模式下生成的文件有chain.bin、chain.lst、NK.bin、xip.bin和xipkernel.bin&#xff0c;如下图所示&#xff1a; 图1 2. Eboot下载Multiple XI…

Final Michael Scofield

转载于:https://www.cnblogs.com/andrewx/archive/2009/08/16/1547738.html

【转】dicom网络通讯入门(3)

转自&#xff1a; dicom网络通讯入门&#xff08;3&#xff09; - assassinx - 博客园 接下来可以进行消息传递了 &#xff0c;也就是dimse &#xff0c;再来复习下 什么是dimse 。n-set n-create c-echo 这些都是dimse 他们都是属于一种结构的pdu 那就是tf-pdu&#xff08;传…

从零开始学习jQuery (三) 管理jQuery包装集【转】

一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着学习如何管理jQuery包装集, 比如添加,删除,切片等. 二.前言 本系列的2,3篇上面列举了太多的API相信大家看着眼晕. 不过这些基础还必须要讲, 基础要扎实.其实对于…

【转】ubuntu 下 VNCview 远程桌面无法传输文件问题

转自&#xff1a;ubuntu18.04VNCview文件传输问题_gsls200808的专栏-CSDN博客_vnc传输文件按钮不可用 很多文章说VNCview不能传输文件&#xff0c;实际上这是一个误区。 以ubuntu为例&#xff0c;默认使用 sudo apt-get vnc4server 这个命令安装上的vncserver实际是tigerVNC…

在何时该用什么方式编译WinCE

这是一篇很好的文章&#xff0c;很多开发者其实并没有搞清楚这个问题&#xff1a;在何时该用什么方式编译WinCE 导致走了很多弯路&#xff0c;也包括我自己 感谢作者写了这篇文章 这么好的文章&#xff0c;我想应该翻译过来给大家 在何时该用什么方式编译WinCE 在新闻组里&…

public protect private继承

引自原来在CGD讨论的几点总结&#xff1a;1. public继承被称为类型继承&#xff08;type inheritance&#xff09;。往往反映is-a关系。2. protected继承基类的所有公有成员都成为派生类的protected成员。这意味着它们可以被后来从该类派生的类访问&#xff0c;但不能在层次结构…

【转】Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题)

转自&#xff1a;Ubuntu 16.04 安装 CUDA10.1 &#xff08;解决循环登陆的问题&#xff09; - Hongkai_Ding - 博客园 0. 前言 这里直接用 cuda安装文件同时安装 NVIDIA 驱动和 CUDA&#xff0c;没有单独安装更高版本的 NVIDIA 驱动&#xff1b;此安装是在 Intel 集显下的图形…