VSCode编译时提示 undefined reference to “XXX” 问题一列

1、问题现象:

下载cJSON.h/cJSON.c 测试cJSON相关函数,只有cJSON.h、cJSON.c 及配套的test.c 三个文件。
1)在code::blocks 中完全正确运行,能看到正确的结果
2)在vscode中点击右上角的三角编译运行,报如下错误,找不到函数:

VSCode编译时提示 undefined reference to “XXX” 问题一列_第1张图片

事实上三个文件就在同一个目录下:

VSCode编译时提示 undefined reference to “XXX” 问题一列_第2张图片

在cJSON.h中有相关函数的声明,比如:

VSCode编译时提示 undefined reference to “XXX” 问题一列_第3张图片

 

2、问题分析

仔细查看编译时的执行命令(图一顶部),如下图:

     从图中的命令可以发现,编译的时候只包含了目录下的 test.c 文件,并没有包含cJSON.c文件。当我们用命令行编译多个源文件时,应该这样编译  gcc  file1.c  file2.c -o output,这个命令要指定参与编译的源文件,头文件地址,输出及相关参数。说明编译时参数设置是有问题的

3、解决方法

     问题是在哪里设置这些需要编译的文件,及参数呢?主要就是在4个jason文件中的下面两个文件中设置,需要注意的地方增加了注释。

    1)在tasks.jason 中设置源文件及参数

{
// 有关 tasks.json 格式的文档,请参见
    // https://go.microsoft.com/fwlink/?LinkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "type": "shell",
            "label": "Compile",
            "command": "D:\\mingw64\\bin\\gcc.exe",   
            "args": [
                "-g",
                "${workspaceFolder}\\cJSON.c","${workspaceFolder}\\test.c",   //此处设置编译需要的源文件,有多个,要分别设置
                "-I",
                "--std=c11",
                "-o",
                "${fileDirname}\\${fileBasenameNoExtension}.exe",
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "presentation": {
                "echo": true,
                "reveal": "always",
                "focus": false,
                "panel": "shared",
                "showReuseMessage": true,
                "clear": false
            },
            // "options": {
            //     "cwd": "D:\\mingw64\\bin"
            // },
            "problemMatcher": [
                "$gcc"
            ],
            //"group": "build"
        }
    ]
}

2) 在c_cpp_properties.json 中设置头文件位置

{
    "configurations": [
      {
        "name": "Win32",
        "includePath": [
          "D:/kkjson/*",              //此处是需要的头文件目录位置,有多处则设置多条
          "${workspaceFolder}/**"
        ],
        "defines": ["_DEBUG", "UNICODE", "_UNICODE"],
        "compilerPath": "D:\\mingw64\\bin\\gcc.exe",
        "cStandard": "c11",
        "cppStandard": "c++17",
        "intelliSenseMode": "msvc-x86"
      }
    ],
    "version": 4
  }

其它两个json文件正常设置即可,与此问题关系不大。

4、验证

     设置上述两个jason文件,保存后。

1) 再次点击又上角的三角,发现故障依旧,编译命令行的参数并未变化(如上图1,图2)

2)采用 Shift+Ctrl+B 编译,出现如下图(下图中的main.c 是将test.c 改了文件名,无其它变化)。从这里命令行可以看出需要的cJSON.c文件已经参与编译了。并且编译成功。

3,然后F5运行,可得到正确结果。

从1)与 2)3)对比看,右上角的三角Run Coder并未正确读取到配置文件的配置。

你可能感兴趣的:(C/C++)