• code编译时报错undefined reference to ...


    问题描述:

    我是在Windows10平台使用vscode编译代码时出现的这个问题,一共有三个文件,json.h、json.cpp,example.cpp。json.h负责函数的声明,json.cpp负责函数的实现,example.cpp负责测试代码的正确性。但是在编译时报错undefined reference to...。

    问题原因:

    vscode使用gcc/g++来编译代码,编译报错`undefined reference to`是由于在链接的时候无法找到函数的说明。

    简而言之就是没有编译json.cpp文件,.cpp文件是编译模块,example.cpp通过预处理、编译、汇编后到了链接的阶段,在这之前json.cpp应该作为另一个编译模块生成了.o文件,之后链接的阶段将example.o中对json.cpp中函数的引用符号换成json.cpp的函数入口地址。但是由于没有对json.cpp进行编译,因此造成了`undefined reference to`,也就是链接阶段找不到这个函数入口地址。

    解决办法:

    在Linux中,当需要编译多个模块时需要把所有的cpp文件罗列出来,例如下面:

    g++ -o example -g example.cpp json.cpp  

    而vscode中tasks.json文件负责设置编译参数 ,我的原始参数设置如下:

    {

        "tasks": [

            {

                "type": "cppbuild",

                "label": "C/C++: g++.exe build active file",

                "command": "D:\\MSYS2\\mingw64\\bin\\g++.exe",

                "args": [

                    "-fdiagnostics-color=always",

                    "-g",

                    // "${fileDirname}\\*.c",  //build c

                    "${file}", //build c++        

                    "-o",

                    "${fileDirname}\\${fileBasenameNoExtension}.exe"

                ],

                "options": {

                    "cwd": "${fileDirname}"

                },

                "problemMatcher": [

                    "$gcc"

                ],

                "group": {

                    "kind": "build",

                    "isDefault": true

                },

                "detail": "Task generated by Debugger."

            }

        ],

        "version": "2.0.0"

    }

    我们注意下面这行:

    "${file}", //build c++ 

    这个的意思很明显,就是只编译当前打开的文件,我当前打开的是example.cpp,因此只编译example.cpp文件,并没有编译json.cpp文件,这样在链接时当然报错undefined reference to。

    解决办法就是将json.cpp一并编译,将上述参数设置修改如下:

    "${fileDirname}/*.cpp",

    这个参数设置是编译当前文件夹下所有的以.cpp为后缀的文件,也就是编译所有的.cpp源文件,这会编译所有的编译模块,问题解决! 

  • 相关阅读:
    ACM-ICPC Northeastern European Regional Contest (NEERC 15) -Generators
    [附源码]java毕业设计基于SSM高考志愿填报系统
    水果店圈子:水果店开业的小活动方案怎么做,水果店开业促销手段有哪些
    配置中心
    7.使用多线程时,要注意哪些场景?经验之谈
    基于Pytorch的动手学习Bert+FC的文本分类模型
    Photoshop 2024(ps ai beta) v25.0
    URL编码解码详解
    [运维]如何快速压缩一个数据库的硬盘占用大小(简单粗暴但有效)
    京东商品详情数据接口【京东API接口开发系列】,监控京东价格走势,接口代码示例,可高并发批量获取
  • 原文地址:https://blog.csdn.net/pan_1214_/article/details/134088707