所以我这次基本上只在大学用Java编写代码 我想用C ++开始我的新项目,并希望保留我一直使用的Eclipse IDE。我需要openCV和Tesseract包(导入)。我用Google搜索和研究了很长一段时间,我似乎做得对吗?但也许有些人可以告诉我。
我做了什么:
按照此说明(MinGW编译器)
- 从开始菜单打开MSYS2 shell
- 运行
pacman -Sy pacman
以更新软件包数据库- 重新打开shell,运行
pacman -Syu
以更新软件包数据库和核心系统软件包- 重新打开shell,运行
pacman -Su
更新其余部分- (Reference)
- 对于64位,请运行
pacman -S mingw-w64-x86_64-toolchain
- 选择要安装的软件包,默认为全部
- 您可能还需要
醇>make
,运行pacman -S make
安装了我需要的库/工具
的OpenCV
pacman -S mingw64/mingw-w64-x86_64-opencv
超正方体
pacman -S mingw64/mingw-w64-x86_64-tesseract-ocr
包含MinGW到PATH(系统环境变量) - >重新启动计算机
开始新的Eclipse项目 - > C ++ - >选择MinGW GCC作为工具链
基本的Hello World - >工作正常
基本的OpenCV示例 - >不起作用
似乎正确地解决了包含。
#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
答案 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