簡體   English   中英

Opencv C ++ MinGW VSCode致命錯誤編譯

[英]Opencv C++ MinGW VSCode fatal error to compile

大家好我想使用VSCode MinGW C ++和OpenCV創建一個簡單的opencv項目,但由於未知原因,我得到這個錯誤我該怎么辦?

我想提一下,在Visual studio 2017我可以在x64架構上運行main.cpp。

我想在VSCode上運行的代碼與我在Visual Studio 2017上運行的代碼相同。

經過10天的嘗試,如果有人證明以下情況,我會放棄50 points

  • VSCODE
  • C ++ 17
  • OpenCV的
  • 在Windows 10 x64架構上

一個成功的構建。

SRC / main.cpp中

#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構建應用程序

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
            }
        }
    ]
}

c_cpp_properties.json

{
    "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但我沒有任何線索,為什么我得到錯誤。

告訴你我已經生成了文件。

C:\\ vcpkg \\安裝\\ x64的Windows \\包括

在此輸入圖像描述

C:\\ vcpkg \\安裝\\ x64的Windows \\包括\\ opencv2

在此輸入圖像描述

C:\\ vcpkg \\安裝\\ x64的Windows \\ LIB

在此輸入圖像描述

以下是在MSYS2 / mingw64中設置OpenCV的說明。 我無法幫助VsCode,但這可能會幫助你取得進步,或幫助其他通過搜索找到這個問題的人。


您不需要自己實際構建OpenCV; MinGW-w64有預先打包的二進制文件。 MSYS2的目的是提供一個unix風格的shell並充當包管理器。 如果您之前沒有使用過MSYS2:

  1. 安裝MSYS2並更新到最新版本,如下所示
  2. 打開MSYS2 / mingw64 shell(不是MSYS2 / msys2 shell)。 在此shell中構建的二進制文件將作為獨立的Windows二進制文件運行,它們不依賴於MSYS2環境。
  3. 測試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 ++程序。 但我不知道這是否真的是“正確”的做法。 截圖


  1. 下載並安裝MinGW-w64選擇x86_64-8.1.0-posix-seh-rt_v6-rev0版本或更新的http://mingw-w64.org/doku.php/start
  2. 打開CMD並轉到C:\\然后克隆此repo https://github.com/huihut/OpenCV-MinGW-Build然后簽出OpenCV-3.4.1-x64分支或只執行此git clone https://github.com/huihut/OpenCV-MinGW-Build.git -b OpenCV-3.4.1-x64
  3. 將Mingw-w64 bin文件夾添加到系統路徑(對我來說路徑是C:\\Program Files\\mingw-w64\\x86_64-8.1.0-posix-seh-rt_v6-rev0\\mingw64\\bin
  4. 將先前克隆的OpenCV mingw bin文件夾添加到系統路徑(對我來說,路徑為C:\\OpenCV-MinGW-Build\\x64\\mingw\\bin
  5. 現在你已經可以使用g ++使用g ++構建一個程序,只需輸入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文件名。
  6. 使用Visual Studio Code打開.cpp文件,然后安裝Code Runner擴展https://marketplace.visualstudio.com/items?itemName=formulahendry.code-runner ,我使用Code Runner輕松運行我的程序。
  7. 在Visual Studio Code中按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",您可以將其應用於用戶設置或僅用於工作區設置。 `
  8. 之后只需按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.jsonlaunch.json ,它適用於gdb調試器。 tasks.jsonhttps://gist.github.com/agtbaskara/4a2ec9a3a9a963069e719c0477185321 launch.jsonhttps://gist.github.com/agtbaskara/de04db8b6a31522dd1e62c43aa6e0f89 c_cpp_properties.jsonhttps://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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM