[英]Opencv C++ MinGW VSCode fatal error to compile
大家好我想使用VSCode MinGW C ++和OpenCV創建一個簡單的opencv項目,但由於未知原因,我得到這個錯誤我該怎么辦?
Visual studio 2017
我可以在x64架構上運行main.cpp。 我想在VSCode上運行的代碼與我在Visual Studio 2017上運行的代碼相同。
50 points
: 一個成功的構建。
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
using namespace cv;
using namespace std;
int main() {
Mat image;
image = imread("./22.png", IMREAD_COLOR); // Read the file
namedWindow("Display window", WINDOW_AUTOSIZE); // Create a window for display.
if (!image.data) // Check for invalid input
{
cout << "Could not open or find the image" << std::endl;
} else { // Image is good!
imshow("Display window", image); // Show our image inside it.
}
waitKey(0);
return 0;
}
在我的VSCode編輯器中,我嘗試使用CTRL + SHIFT + B
的tasks.json構建應用程序
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "echo",
"type": "shell",
"command": "",
"args": [
"g++",
"-I", "C:\\vcpkg\\installed\\x64-windows\\include",
"-L", "C:\\vcpkg\\installed\\x64-windows\\lib",
"./src/main.cpp",
"-lopencv_core341",
"-lopencv_highgui341",
"-o app"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"${workspaceFolder}/src",
"C:/vcpkg/installed/x64-windows/include",
"C:/vcpkg/installed/x64-windows/lib"
],
"browse": {
"path": [
],
"limitSymbolsToIncludedHeaders": true
},
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.17134.0",
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.14.26428/bin/Hostx64/x64/cl.exe",
"cStandard": "c11",
"cppStandard": "c++17",
"intelliSenseMode": "msvc-x64",
"C_Cpp.intelliSenseEngine": "Tag Parser"
}
],
"version": 4
}
我得到了這個錯誤
> Executing task: g++ main.cpp -I C:/vcpkg/installed/x64-windows/include -L C:/vcpkg/installed/x64-windows/lib -lopencv_core341 -lopencv_highgui341 -o app <
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text+0x51): undefined reference to `cv::imread(cv::String const&, int)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text+0xa2): undefined reference to `cv::namedWindow(cv::String const&, int)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text+0x119): undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text+0x139): undefined reference to `cv::waitKey(int)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text$_ZN2cv6StringC1EPKc[__ZN2cv6StringC1EPKc]+0x42): undefined reference to `cv::String::allocate(unsigned int)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text$_ZN2cv6StringD1Ev[__ZN2cv6StringD1Ev]+0xf): undefined reference to `cv::String::deallocate()'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text$_ZN2cv3MatD1Ev[__ZN2cv3MatD1Ev]+0x2d): undefined reference to `cv::fastFree(void*)'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text$_ZN2cv3Mat7releaseEv[__ZN2cv3Mat7releaseEv]+0x40): undefined reference to `cv::Mat::deallocate()'
C:\Users\giorg\AppData\Local\Temp\ccNFIHQq.o:main.cpp:(.text$_ZN2cv3MataSEOS0_[__ZN2cv3MataSEOS0_]+0xb4): undefined reference to `cv::fastFree(void*)'
collect2.exe: error: ld returned 1 exit status
The terminal process terminated with exit code: 1
Terminal will be reused by tasks, press any key to close it.
我已經使用vcpkg
使用vcpkg install opencv
生成了opencv庫,我認為這樣做非常好。
在使用vspkg
生成所有文件后,我使用Visual Studio 2017測試所有文件並且正常工作,但我的主要目標是使用VSCode
但我沒有任何線索,為什么我得到錯誤。
告訴你我已經生成了文件。
以下是在MSYS2 / mingw64中設置OpenCV的說明。 我無法幫助VsCode,但這可能會幫助你取得進步,或幫助其他通過搜索找到這個問題的人。
您不需要自己實際構建OpenCV; MinGW-w64有預先打包的二進制文件。 MSYS2的目的是提供一個unix風格的shell並充當包管理器。 如果您之前沒有使用過MSYS2:
g++
工作原理。 然后你可以添加OpenCV:
pacman -Ss mingw64/mingw-w64-x86_64-opencv
它已經准備好了。 我在MSYS2 shell中使用以下命令編譯了示例程序:
g++ -o main main.cpp -std=c++17 -lopencv_core -lopencv_highgui -lopencv_imgcodecs -lopencv_imgproc
並成功運行程序。
請注意,您不需要將MSYS2用於構建環境; 如果設置Include和Library路徑指向MSYS2的程序包管理器安裝標頭和庫的位置,則可以從Windows命令提示符或任何其他IDE調用g++
。 (在MSYS2安裝根目錄下的/mingw64/include/opencv*
和/mingw64/lib
下)。
我嘗試使用Windows 10 x64上的Visual Studio Code中的MinGW-w64 g ++在OpenCV 3.4.1中構建和運行C ++程序。 但我不知道這是否真的是“正確”的做法。 截圖
x86_64-8.1.0-posix-seh-rt_v6-rev0
版本或更新的http://mingw-w64.org/doku.php/start 。 OpenCV-3.4.1-x64
分支或只執行此git clone https://github.com/huihut/OpenCV-MinGW-Build.git -b OpenCV-3.4.1-x64
C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin
) C:\\OpenCV-MinGW-Build\\x64\\mingw\\bin
) g++ test.cpp -IC:\\OpenCV-MinGW-Build\\include -LC:\\OpenCV-MinGW-Build\\x64\\mingw\\bin -llibopencv_calib3d341 -llibopencv_core341 -llibopencv_dnn341 -llibopencv_features2d341 -llibopencv_flann341 -llibopencv_highgui341 -llibopencv_imgcodecs341 -llibopencv_imgproc341 -llibopencv_ml341 -llibopencv_objdetect341 -llibopencv_photo341 -llibopencv_shape341 -llibopencv_stitching341 -llibopencv_superres341 -llibopencv_video341 -llibopencv_videoio341 -llibopencv_videostab341
只是改變test.cpp
到您的.cpp文件名。 Ctrl + comma
,然后搜索"code-runner.executorMap":
並將"cpp:"
條目上的內容更改為"cd $dir && g++ $fileName -o $fileNameWithoutExt -IC:/OpenCV-MinGW-Build/include -LC:/OpenCV-MinGW-Build/x64/mingw/bin -llibopencv_calib3d341 -llibopencv_core341 -llibopencv_dnn341 -llibopencv_features2d341 -llibopencv_flann341 -llibopencv_highgui341 -llibopencv_imgcodecs341 -llibopencv_imgproc341 -llibopencv_ml341 -llibopencv_objdetect341 -llibopencv_photo341 -llibopencv_shape341 -llibopencv_stitching341 -llibopencv_superres341 -llibopencv_video341 -llibopencv_videoio341 -llibopencv_videostab341 && $dir$fileNameWithoutExt",
您可以將其應用於用戶設置或僅用於工作區設置。 ` Ctrl+Alt+N
即可構建並運行程序或只需按下播放按鈕即可。 我相信您也可以通過向args
部分添加tasks.json
-IC:\\OpenCV-MinGW-Build\\include ..
來將其應用於tasks.json
,以使用Visual Studio Code C / C ++擴展調試。 您還可以將"C:/OpenCV-MinGW-Build/include"
到c_cpp_properties.json
包含路徑以啟用智能感知。 如果你想使用另一個版本的OpenCV,只需將g ++參數的所有“341”部分替換為另一個版本,例如使用OpenCV 3.3.1使用-llibopencv_calib3d331
等等。
編輯:我已經嘗試編輯我的tasks.json
和launch.json
,它適用於gdb調試器。 tasks.json
: https://gist.github.com/agtbaskara/4a2ec9a3a9a963069e719c0477185321 launch.json
: https://gist.github.com/agtbaskara/de04db8b6a31522dd1e62c43aa6e0f89 c_cpp_properties.json
: https://gist.github.com/agtbaskara/ 0eb773ac3085557baf7bf20b031fb49e
安裝vcpkg(MS packager以安裝基於Windows的開源項目)並使用powershell命令.\\vcpkg install opencv:x64-windows-static
。 將自動為您安裝依賴庫。
可以使用.\\vcpkg integrate install
自動集成到您的VS項目中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.