VS Code не находит мои #include файлы — перепробовал все возможные способы

#c #opencv #visual-studio-code #include

#c #opencv #visual-studio-code #включить

Вопрос:

Я знаю, что эта проблема поднималась несколько раз, но даже попробовав все возможные предложения, которые я смог найти в Интернете, я не смог найти способ заставить мою простую программу работать.

Вот история: я запускаю программу на C с кодом Visual Studio и хочу использовать библиотеки OpenCV. Поскольку я новичок в этих вещах, я начал с вырезания и вставки какой-то простой программы из учебника opencv. Когда я пытаюсь выполнить сборку, VSC не находит файлы OpenCV и выдает ошибку.

C:UsersRobertoDocumentsProgram Файлы данных C SVM Test1.cpp:5:10: фатальная ошибка: opencv2/core.hpp: нет такого файла или каталога #include <opencv2/core.hpp>

Программа запускается с этими #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.. И, конечно же, файлы НАХОДЯТСЯ в нужном каталоге.

Я также попытался обойти эту проблему, добавив инструкцию -I в task.json:

 {
"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:: …»

Есть предложения о том, как заставить это работать?

Ответ №1:

После многих попыток я придумал некоторое объяснение и решение на случай, если у кого-то еще возникнет такая же проблема.

Резюме: мои проблемы, когда:

  1. найдите заголовочные файлы, перечисленные как #include
  2. свяжите соответствующую библиотеку opencv

Для 1) кажется, что использование параметра «includePath» доступно в c_cpp_properties.json НЕ делает того, чего можно было бы логически ожидать (на самом деле, я не знаю, используется ли он вообще). Единственный способ, который я нашел, — указать путь включения, — это явно использовать аргумент «/I» в tasks.json

Для 2) сначала я где-то нашел кого-то, утверждающего, что VS Code должен использовать компилятор Microsoft C и несовместим с mingw. Я почти уверен, что это не так, но я все же решил переключиться на Microsoft cl.exe

Во-вторых, кажется, что для того, чтобы VS Code «находил» компилятор, вам нужно установить какую-то конкретную переменную среды. Я не выяснил, какая именно переменная, но хитрость заключается в том, чтобы: а) запустить «командную строку встроенного инструмента x64 для VS2019». При этом открывается окно cmd и выполняется ряд настроек переменных и прочего. Этот файл можно получить со страницы загрузки (https://visualstudio.microsoft.com/downloads /) Visual Studio, перейдя в нижний раздел «Инструменты для Visual Studio 2019», а затем «Инструменты сборки для Visual Studio 2019» б) из этой командной строки перейдите в свой рабочий каталог и оттуда запустите инструкцию «код.», который, предполагая, что путь к вашей установке VS Code указан в переменной PATH, запустит VS Code c) если я вместо этого запущу VS Code непосредственно из window, он не будет работать (не находит cl.exe )

В-третьих, существуют разные cl.exe , в зависимости от того, выполняется ли компиляция с 32- или 64-разрядной платформы на 32- или 64-разрядную целевую… Я потратил некоторое время на выяснение этого, и ключ использует правильную «командную строку встроенного инструмента x64 для VS2019»

В-четвертых, библиотека opencv должна быть просто указана в задачах.json предпочтительно ПОСЛЕ всех других аргументов (если я правильно помню, я получил ошибку ранее, потому что я вызвал ее до компиляции фактического файла)

Вполне возможно, что все эти проблемы, описанные выше, были характерны только для моего компьютера или для того факта, что я еще очень новичок в этом деле… но если нет, рад, если мой опыт может помочь

Ответ №2:

«отменить определение ссылки на cv …» это означает, что компоновщик не смог найти функции, которые вы вызываете в своем коде. Убедитесь, что вы правильно связали библиотеки.

Комментарии:

1. Ну, в этом и суть: несмотря на то, что я указываю правильный путь в директиве includePath, и Intellisense действительно находит эти файлы, во время компиляции / компоновки я получаю эту ошибку. Я знаю, что это потому, что компоновщик их не находит, мой вопрос: «что мне нужно сделать, чтобы заставить его их найти?»

2. Я не вижу никаких ссылок на ваши файлы .lib, .a, .so или .dll в вашем файле конфигурации.

3. В ваших «аргументах»:[ ] вам нужно ввести -lLIBRARY_NAME

4. Я действительно сделал это: -IC:/Users/Roberto/Documents/Program Data Files/C /opencv/build/include

5. «Files/C / opencv /build / include» — это каталог, а не двоичный файл библиотеки, который я предполагаю. Если у вас есть библиотека внутри этого каталога, это будет выглядеть следующим образом: «Files/C /opencv/build/include/opencv.lib»