【问题标题】:VS Code doesn't find my #include files - tried all possible waysVS Code 找不到我的#include 文件 - 尝试了所有可能的方法
【发布时间】:2021-01-25 12:18:18
【问题描述】:

我知道这个问题已经多次提出,但即使尝试了我在 Internet 上找到的所有可能的建议,我也找不到让我的简单程序工作的方法。

故事如下:我正在使用 Visual Studio Code 启动一个 C++ 程序,并且我想使用 openCV 库。由于我是这些东西的初学者,所以我首先从 opencv 教程中剪切和粘贴一些简单的程序。当我尝试构建时,VSC 找不到 openCV 文件并抛出错误。

C:\Users\Roberto\Documents\Program Data Files\C++\SVM\Test1.cpp:5:10: 致命错误:opencv2/core.hpp:没有这样的文件或目录#include

程序以这些#include 开始(没有找到任何opencv2 文件):

#include <iostream> 
#include <string>   
#include <iomanip>  
#include <sstream>  
#include <opencv2/core.hpp> 
#include <opencv2/imgproc.hpp>  
#include <opencv2/videoio.hpp>
#include <opencv2/highgui.hpp>

这是我的 launch.json:

"version": "0.2.0",
"configurations": [
    {
        "name": "Debug",
        "type": "cppdbg",
        "request": "launch",
        "program": "${fileDirname}\\${fileBasenameNoExtension}.exe",
        "args": [],
        "MIMode": "gdb",
        "miDebuggerPath": "C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/gdb.exe",
        "stopAtEntry": true,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": false
    }
]

这是 c_cpp_properties.json

{
"configurations": [
    {
        "name": "Win32",
        "includePath": [
            "C:/Users/Roberto/Documents/Program Data Files/C++/opencv/build/include/*",
            "${workspaceFolder}/**"
        ],
        "defines": [
            "_DEBUG",
            "UNICODE",
            "_UNICODE"
        ],
        "windowsSdkVersion": "10.0.17763.0",
        "compilerPath": "C:/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin/g++.exe",
        "cStandard": "c11",
        "cppStandard": "c++17",
        "intelliSenseMode": "gcc-x86"
    }
],
"version": 4

}

这个想法是openCV文件在includePath的目录中。 我在几个地方读过我不应该使用 includePath 而只使用 compilePath。现在,不知道是什么意思,但我也尝试将openCV包含文件的整个文件夹复制到coplier目录中,但没有成功。

一些笔记。 Intellisense“找到”文件,因为如果我开始输入“#include

我也尝试通过在task.json中添加-I指令来绕过这个问题:

{
"version": "2.0.0",
"tasks": [
    {
        "type": "shell",
        "label": "C/C++: g++.exe build active file",
        "command": "C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin\\g++.exe",
        "args": [
            "-g",
            "${file}",
            "-o",
            "${fileDirname}\\${fileBasenameNoExtension}.exe",
            "-IC:/Users/Roberto/Documents/Program Data Files/C++/opencv/build/include"
        ],
        "options": {
            "cwd": "${workspaceFolder}"
        },
        "problemMatcher": [
            "$gcc"
        ],
        "group": {
            "kind": "build",
            "isDefault": true
        }
    }
]

}

在这种情况下,我得到一个不同的错误,即所有 openCV 函数调用都被标记为“未定义对 cv::... 的引用”

关于如何使这件事发挥作用的任何建议?

【问题讨论】:

    标签: c++ opencv visual-studio-code include


    【解决方案1】:

    经过多次尝试,我想出了一些解释和解决方案,以防其他人遇到同样的问题。

    回顾:我的问题在哪里:

    1. 找到列为#include 的头文件
    2. 链接正确的 opencv 库

    对于 1),似乎使用 c_cpp_properties.json 中可用的“includePath”设置不会做任何人在逻辑上期望的事情(事实上,我根本不知道它是否被使用)。我发现的唯一方法是指定包含路径是在 tasks.json 中显式使用参数“/I”

    对于 2),首先我在某个地方发现有人声称 VS Code 必须使用 Microsoft C++ 编译器,并且与 mingw 不兼容。我很确定不是这样,但我还是决定改用微软的 cl.exe

    其次,似乎要让 VS Code “找到”编译器,您需要设置一些特定的环境变量。我没有确切地找到哪个变量,但诀窍是: a) 启动“x64 Native Tool Command Prompt for VS2019”。这将打开一个 cmd 窗口并执行一些变量设置和其他内容。此文件可从 Visual Studio 的下载页面 (https://visualstudio.microsoft.com/downloads/) 获得,到底部到“Visual Studio 2019 工具”,然后到“Visual Studio 2019 构建工具” b) 从此命令提示符导航到您的工作目录,然后从那里启动指令“code.”,假设您的 VS Code 安装路径在 PATH 变量中,它将启动 VS Code c) 如果我直接从窗口启动 VS Code,它将无法工作(找不到 cl.exe)

    第三,有不同的 cl.exe,取决于一个是从 32 位或 64 位平台编译到 32 位或 64 位目标的...我浪费了一些领带来弄清楚这一点,关键是使用正确的“VS2019 的 x64 原生工具命令提示符”

    第四,opencv 库必须只在 tasks.json 中列出,最好是在所有其他参数之后(如果我没记错的话,我之前弄错了,因为我在编译实际文件之前调用了它)

    很可能以上所有这些问题仅是我的 PC 所特有的,或者是因为我还是这个东西的初学者......但如果不是,很高兴我的经验可能对您有所帮助

    【讨论】:

      【解决方案2】:

      "undefine reference to cv ..." 这意味着链接器找不到您在代码中调用的函数。确保正确链接库。

      【讨论】:

      • 好吧,这就是重点:即使我在 includePath 指令中指定了正确的路径,并且 Intellisense 确实找到了这些文件,但在编译/链接时我得到了这个错误。我知道这是因为链接器没有找到它们,我的问题是“我该怎么做才能让他找到它们?”
      • 我在您的配置文件中没有看到对您的 .lib、.a、.so 或 .dll 文件的任何引用。
      • 在你的 "args":[ ] 你需要输入 -lLIBRARY_NAME
      • 我确实做到了:-IC:/Users/Roberto/Documents/Program Data Files/C++/opencv/build/include
      • "Files/C++/opencv/build/include" 是一个目录,而不是我假设的库二进制文件。如果您在此目录中有一个库,则如下所示:“Files/C++/opencv/build/include/opencv.lib”
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 2014-02-16
      • 1970-01-01
      • 1970-01-01
      • 2021-08-20
      • 1970-01-01
      • 2020-03-09
      相关资源
      最近更新 更多