#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:
После многих попыток я придумал некоторое объяснение и решение на случай, если у кого-то еще возникнет такая же проблема.
Резюме: мои проблемы, когда:
- найдите заголовочные файлы, перечисленные как #include
- свяжите соответствующую библиотеку 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»