Eclipse CDT未定义引用(通过MYSYS2下载的包)

时间:2018-02-16 16:15:29

标签: c++ opencv eclipse-cdt tesseract msys2

所以我这次基本上只在大学用Java编写代码 我想用C ++开始我的新项目,并希望保留我一直使用的Eclipse IDE。我需要openCV和Tesseract包(导入)。我用Google搜索和研究了很长一段时间,我似乎做得对吗?但也许有些人可以告诉我。

我做了什么:

  1. 下载了Eclipse CDT
  2. 已下载MYSYS2
  3. 按照此说明(MinGW编译器)

      
        
    1. 从开始菜单打开MSYS2 shell
    2.   
    3. 运行pacman -Sy pacman以更新软件包数据库
    4.   
    5. 重新打开shell,运行pacman -Syu以更新软件包数据库和核心系统软件包
    6.   
    7. 重新打开shell,运行pacman -Su更新其余部分
    8.   
    9. Reference)      
          
      • 对于64位,请运行pacman -S mingw-w64-x86_64-toolchain
      •   
    10.   
    11. 选择要安装的软件包,默认为全部
    12.   
    13. 您可能还需要make,运行pacman -S make
    14.   
  4. 安装了我需要的库/工具

    的OpenCV

    pacman -S mingw64/mingw-w64-x86_64-opencv

    超正方体

    pacman -S mingw64/mingw-w64-x86_64-tesseract-ocr

  5. 包含MinGW到PATH(系统环境变量) - >重新启动计算机

  6. 开始新的Eclipse项目 - > C ++ - >选择MinGW GCC作为工具链

  7. 基本的Hello World - >工作正常

  8. 基本的OpenCV示例 - >不起作用

  9. 似乎正确地解决了包含。

    #include <opencv2/core/core.hpp>

    #include <opencv2/highgui/highgui.hpp>

    没有错误。

    FullCode:

    #include <opencv2/core/core.hpp>
    #include <opencv2/highgui/highgui.hpp>
    #include <iostream>
    
    using namespace cv;
    using namespace std;
    
    int main( int argc, char** argv )
    {
        if( argc != 2)
        {
         cout <<" Usage: display_image ImageToLoadAndDisplay" << endl;
         return -1;
        }
    
        Mat image;
        image = imread(argv[1], CV_LOAD_IMAGE_COLOR);   // Read the file
    
        if(! image.data )                              // Check for invalid input
        {
            cout <<  "Could not open or find the image" << std::endl ;
            return -1;
        }
    
        namedWindow( "Display window", WINDOW_AUTOSIZE );// Create a window for display.
        imshow( "Display window", image );                   // Show our image inside it.
    
        waitKey(0);                                          // Wait for a keystroke in the window
        return 0;
    }
    

    Eclipse说的是什么:

    16:54:43 **** Incremental Build of configuration Debug for project hello ****
    Info: Internal Builder is used for build
    g++ -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\hello.o" "..\\src\\hello.cpp" 
    g++ -o hello.exe "src\\hello.o" 
    src\hello.o: In function `main':
    C:\Users\Vaio\Desktop\EclipseProjekte\hello\Debug/../src/hello.cpp:17: undefined reference to `cv::imread(cv::String const&, int)'
    C:\Users\Vaio\Desktop\EclipseProjekte\hello\Debug/../src/hello.cpp:25: undefined reference to `cv::namedWindow(cv::String const&, int)'
    C:\Users\Vaio\Desktop\EclipseProjekte\hello\Debug/../src/hello.cpp:26: undefined reference to `cv::imshow(cv::String const&, cv::_InputArray const&)'
    C:\Users\Vaio\Desktop\EclipseProjekte\hello\Debug/../src/hello.cpp:28: undefined reference to `cv::waitKey(int)'
    src\hello.o: In function `cv::String::String(char const*)':
    C:/msys64/mingw64/include/opencv2/core/cvstd.hpp:602: undefined reference to `cv::String::allocate(unsigned long long)'
    src\hello.o: In function `cv::String::~String()':
    C:/msys64/mingw64/include/opencv2/core/cvstd.hpp:648: undefined reference to `cv::String::deallocate()'
    src\hello.o: In function `cv::Mat::~Mat()':
    C:/msys64/mingw64/include/opencv2/core/mat.inl.hpp:692: undefined reference to `cv::fastFree(void*)'
    src\hello.o: In function `cv::Mat::release()':
    C:/msys64/mingw64/include/opencv2/core/mat.inl.hpp:804: undefined reference to `cv::Mat::deallocate()'
    src\hello.o: In function `cv::Mat::operator=(cv::Mat&&)':
    C:/msys64/mingw64/include/opencv2/core/mat.inl.hpp:1371: undefined reference to `cv::fastFree(void*)'
    collect2.exe: error: ld returned 1 exit status
    
    16:54:46 Build Finished (took 2s.908ms)
    

    它无法找到图书馆???? 如果它没有像iostream一样连接库那么通过MSYS2下载它是什么意思

    我是否需要将所有库对象添加到链接器设置C/C++ Build -> Settings -> Tool Settings -> GCC C++ Linker -> Libraries

1 个答案:

答案 0 :(得分:0)

好吧所以我猜它的obv但是对于那些有同样错误的人,MSYS2只是添加了所有的opencv和tesseract文件。

如果您想使用它们,您需要将它指定给链接器。

filename:libopencv_core.dll.a

您需要在开头排除lib,并且.dll和.a

linker:opencv_core

所有libs都可以在mingw路径上找到:(C:\ msys64 \ mingw64 \ lib)

最后用-lopencv_core

链接它

或通过Eclipse GUI C / C ++ Build - &gt;设置 - &gt;工具设置 - &gt; GCC C ++链接器 - &gt;图书馆 - &gt;添加库 - &gt; opencv_core