OpenCV 2.3不编译,未定义的引用错误 [英] OpenCV 2.3 doesn't compile, undefined reference error

查看:1497
本文介绍了OpenCV 2.3不编译,未定义的引用错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Windows 7 64bits和Netbeans 7.0中使用OpenCV。我试图编译使用MinGW和cygwin的,但都失败未定义的引用下一个代码。



当我用垫或FLANN和其他人,我不能编译,但我添加所有的库(我试图只添加调试,发布,只需要一个...但失败)。



ubuntu的同样的代码,在Windows中编译它。我使用2.3编译版本(使用CMake)和可安装的版本。

  #includeopencv2\opencv.hpp 
#include< iostream>

using namespace std;

int main(void)
{
cv :: Mat :: eye(1,1,0);

return 0;
}






 <$ c / c / c / c / c / c / c // usr / bin / make-f nbproject / Makefile-Release.mk QMAKE = SUBPROJECTS = .clean-conf 
make [1]:进入目录`/ cygdrive / f / Proyectos / OpenCV23Sandbox'
rm -f -r build / Release
rm -f dist / Release / Cygwin-Windows / opencv23sandbox.exe
make [1]:离开目录`/ cygdrive / f / Proyectos / C ++ / OpenCV23Sandbox'

CLEAN SUCCESSFUL(总时间:1s)
/ usr / bin / make-f nbproject / Makefile-Release.mk QMAKE = SUBPROJECTS = .build-conf
make [1]:进入目录`/ cygdrive / f / Proyectos / C ++ / OpenCV23Sandbox'
/ usr / bin / make-f nbproject / Makefile-Release.mk dist / Release / Cygwin-在Windows / opencv23sandbox.exe
进行[2]:进入目录`/ cygdrive / F / PROYECTOS / C ++ / OpenCV23Sandbox'
的mkdir -p构建/发布/ Cygwin的Windows的
RM -f构建/Release/Cygwin-Windows/main.od
g ++。exe -c -O2 -I / cygdrive / C / OpenCV2.3 / build / include -MMD -MP -MF build / Release / Cygwin-Windows / main .od -o build / Release / Cygwin-Windows / main.o main.cpp
mkdir -p dist / Release / Cygwin-Windows
g ++。exe -o dist / Release / Cygwin-Windows / opencv23sandbox建立/释放/ Cygwin的Windows的/ main.o中-L / cygdrive / C / OpenCV2.3 /编译/ 86 / VC10 / lib目录-lopencv_calib3d230 -lopencv_calib3d230d -lopencv_contrib230 -lopencv_contrib230d -lopencv_core230 -lopencv_core230d -lopencv_features2d230 -lopencv_features2d230d -lopencv_flann230 -lopencv_flann230d - lopencv_gpu230 -lopencv_gpu230d -lopencv_haartraining_engine -lopencv_haartraining_engined -lopencv_highgui230 -lopencv_highgui230d -lopencv_imgproc230 -lopencv_imgproc230d -lopencv_legacy230 -lopencv_legacy230d -lopencv_ml230 -lopencv_ml230d -lopencv_objdetect230 -lopencv_objdetect230d -lopencv_video230 -lopencv_video230d
编译/发布/ Cygwin的Windows的/ main.o中:main.cpp中:(。text + 0xac):未定义引用`cv :: Mat :: eye(int,int,int)'
build / Release / Cygwin-Windows / main.o:main.cpp :(。 + 0x106):未定义的引用`cv :: fastFree(void *)'
build / Release / Cygwin-Windows / main.o:main.cpp :(。 :fastFree(void *)'
build / Release / Cygwin-Windows / main.o:main.cpp :(。text + 0x1dd):未定义引用`cv :: fastFree(void *)'
build / Release / Cygwin-Windows / main.o:main.cpp :( .text + 0x1fa):未定义引用`cv :: Mat :: deallocate()'
build / main.o:main.cpp :(。text + 0x20a):未定义引用`cv :: Mat :: deallocate()'
build / Release / Cygwin-Windows / main.o:main.cpp .text + 0x21a):未定义引用`cv :: Mat :: deallocate()'
build / Release / Cygwin-Windows / main.o:main.cpp :(。text $ _ZN2cv3MatD1Ev [cv :: Mat ::〜Mat()] + 0x66):未定义的引用`cv :: Mat :: deallocate()'
build / Release / Cygwin-Windows / main.o:main.cpp :( text $ _ZN2cv3MatD1Ev [cv :: Mat ::〜Mat()] + 0x5e):未定义的引用`cv :: fastFree(void *)'
collect2:ld返回1make [2]:离开目录`/ cygdrive / f / Proyectos / C ++ / OpenCV23Sandbox'
make [1]:离开目录`/ cygdrive / f / Proyectos / C ++ / OpenCV23Sandbox'
退出状态
make [2]发布/ Cygwin-Windows / opencv23sandbox.exe]错误1
make [1]:*** [.build-conf]错误2
make:*** [.build-impl]错误2

BUILD FAILED(退出值2,总时间:2s)






尝试使用MinGW库:

 / bin / make-f nbproject / Makefile- Release.mk QMAKE = SUBPROJECTS = .clean-conf 
make [1]:输入目录`/ f / Proyectos / C ++ / OpenCV23Sandbox'
rm -f -r build / Release
rm - ˚FDIST /发行/ MinGW的Windows的/ opencv23sandbox.exe
进行[1]:离开目录`/ F / PROYECTOS / C ++ / OpenCV23Sandbox'

CLEAN成功(总时间:350毫秒)
/ bin / make-f nbproject / Makefile-Release.mk QMAKE = SUBPROJECTS = .build-conf
make [1]:输入目录`/ f / Proyectos / C ++ / OpenCV23Sandbox'
/斌/使-f的nbproject / Makefile-Release.mk DIST /发行/ MinGW的Windows的/ opencv23sandbox.exe
进行[2]:进入目录`/ F / PROYECTOS / C ++ / OpenCV23Sandbox'
mkdir -p build / Release / MinGW-Windows
rm -f build / Release / MinGW-Windows / main.od
g ++。exe -c -O2 -I / C / OpenCV2.3 / build / include -MMD -MP -MF build / Release / MinGW-Windows / main.od -o build / Release / MinGW-Windows / main.o main.cpp
mkdir -p dist / Release / MinGW-Windows
g ++。exe -o dist / Release / MinGW-Windows / opencv23sandbox build / Release / MinGW-Windows / main.o -L ../ OpenCV / OpenCV2.3 / build / x86 / mingw / lib ../ OpenCV / OpenCV2.3 / build / x86 / mingw / lib / libopencv_calib3d230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_contrib230.dll.a ../OpenCV/OpenCV2.3/ build / x86 / mingw / lib / libopencv_core230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_features2d230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/ lib / libopencv_flann230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_gpu230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_highgui230.dll。 a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_imgproc230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_legacy230.dll.a ../OpenCV/ OpenCV2.3 / build / x86 / mingw / lib / libopencv_ml230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_objdetect230.dll.a../OpenCV/OpenCV2.3/build/ x86 / mingw / lib / libopencv_video230.dll.a
build / Release / MinGW-Windows / main.o:main.cpp :( .text + 0x4f):未定义引用`cv :: Mat :: eye int,int,int)'
build / Release / MinGW-Windows / main.o:main.cpp :( .text + 0xac):未定义引用`cv :: fastFree(void *)'
build / Release / MinGW-Windows / main.o:main.cpp :( .text + 0x11a):未定义引用`cv :: fastFree(void *)'
build / Release / MinGW-Windows / main .o:main.cpp :(。text + 0x191):未定义的引用`cv :: fastFree(void *)'
build / Release / MinGW-Windows / main.o:main.cpp :(。 + 0x1a7):未定义的引用`cv :: Mat :: deallocate()'
build / Release / MinGW-Windows / main.o:main.cpp :(。text + 0x1ba):undefined reference to`cv :: Mat :: deallocate()'
build / Release / MinGW-Windows / main.o:main.cpp :(。text + 0x1ce):未定义引用`cv :: Mat :: deallocate
build / Release / MinGW-Windows / main.o:main.cpp :(。text $ _ZN2cv3MatD1Ev [cv :: Mat ::〜Mat()] + 0x74):未定义的引用`cv :: Mat: :deallocate()'
build / Release / MinGW-Windows / main.o:main.cpp :(。text $ _ZN2cv3MatD1Ev [cv :: Mat ::〜Mat()] + 0x63):undefined reference to` cv :: fastFree(void *)'
collect2:ld返回1退出状态
make [2]:离开目录`/ f / Proyectos / C ++ / OpenCV23Sandbox'
make [1]离开目录`/ f / Proyectos / C ++ / OpenCV23Sandbox'
make [2]:*** [dist / Release / MinGW-Windows / opencv23sandbox.exe]错误1
make [1]:** * [.build-conf]错误2
make:*** [.build-impl]错误2

BUILD FAILED(退出值2,总时间:1s)

  。g ++的exe文件-o DIST /发行/ MinGW的Windows的/ opencv23sandbox构建/发布/ MinGW的Windows的/ main.o中-L ../的OpenCV / OpenCV2.3 /编译/ 86 / MinGW的/ lib目录-lopencv_calib3d230.dll -lopencv_contrib230。 DLL -lopencv_core230.dll -lopencv_features2d230.dll -lopencv_flann230.dll -lopencv_gpu230.dll -lopencv_highgui230.dll -lopencv_imgproc230.dll -lopencv_legacy230.dll -lopencv_ml230.dll -lopencv_objdetect230.dll -lopencv_video230.dll 
解决方案

使用预编译MinGW库? (它看起来如此)。我试了几天,让我的项目成功链接在Code :: Blocks下。我看到你描述的相同种类的错误(错误的引用等)。



我最后使用显示的步骤重新编译OpenCV 这里,一切顺利。


I'm using OpenCV in Windows 7 64bits and Netbeans 7.0. I tried to compile the next code using MinGW and cygwin but both fails with undefined references.

When I use MAT or FLANN and others I can't compile, but I'm adding all libraries (I tried only adding Debug ones, Release ones, only needed ones... but fails).

The same code in ubuntu works, but I need to compile it in windows too. I'm using the 2.3 compiled version (using CMake) and the installable one.

#include "opencv2\opencv.hpp"
#include <iostream>

using namespace std;

int main(void)
{
    cv::Mat::eye(1, 1, 0);

    return 0;
}


"/usr/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .clean-conf
make[1]: Entering directory `/cygdrive/f/Proyectos/C++/OpenCV23Sandbox'
rm -f -r build/Release
rm -f dist/Release/Cygwin-Windows/opencv23sandbox.exe
make[1]: Leaving directory `/cygdrive/f/Proyectos/C++/OpenCV23Sandbox'

CLEAN SUCCESSFUL (total time: 1s)
"/usr/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/cygdrive/f/Proyectos/C++/OpenCV23Sandbox'
"/usr/bin/make"  -f nbproject/Makefile-Release.mk dist/Release/Cygwin-Windows/opencv23sandbox.exe
make[2]: Entering directory `/cygdrive/f/Proyectos/C++/OpenCV23Sandbox'
mkdir -p build/Release/Cygwin-Windows
rm -f build/Release/Cygwin-Windows/main.o.d
g++.exe    -c -O2 -I/cygdrive/C/OpenCV2.3/build/include -MMD -MP -MF build/Release/Cygwin-Windows/main.o.d -o build/Release/Cygwin-Windows/main.o main.cpp
mkdir -p dist/Release/Cygwin-Windows
g++.exe     -o dist/Release/Cygwin-Windows/opencv23sandbox build/Release/Cygwin-Windows/main.o -L/cygdrive/C/OpenCV2.3/build/x86/vc10/lib -lopencv_calib3d230 -lopencv_calib3d230d -lopencv_contrib230 -lopencv_contrib230d -lopencv_core230 -lopencv_core230d -lopencv_features2d230 -lopencv_features2d230d -lopencv_flann230 -lopencv_flann230d -lopencv_gpu230 -lopencv_gpu230d -lopencv_haartraining_engine -lopencv_haartraining_engined -lopencv_highgui230 -lopencv_highgui230d -lopencv_imgproc230 -lopencv_imgproc230d -lopencv_legacy230 -lopencv_legacy230d -lopencv_ml230 -lopencv_ml230d -lopencv_objdetect230 -lopencv_objdetect230d -lopencv_video230 -lopencv_video230d 
build/Release/Cygwin-Windows/main.o:main.cpp:(.text+0xac): undefined reference to `cv::Mat::eye(int, int, int)'
build/Release/Cygwin-Windows/main.o:main.cpp:(.text+0x106): undefined reference to `cv::fastFree(void*)'
build/Release/Cygwin-Windows/main.o:main.cpp:(.text+0x16f): undefined reference to `cv::fastFree(void*)'
build/Release/Cygwin-Windows/main.o:main.cpp:(.text+0x1dd): undefined reference to `cv::fastFree(void*)'
build/Release/Cygwin-Windows/main.o:main.cpp:(.text+0x1fa): undefined reference to `cv::Mat::deallocate()'
build/Release/Cygwin-Windows/main.o:main.cpp:(.text+0x20a): undefined reference to `cv::Mat::deallocate()'
build/Release/Cygwin-Windows/main.o:main.cpp:(.text+0x21a): undefined reference to `cv::Mat::deallocate()'
build/Release/Cygwin-Windows/main.o:main.cpp:(.text$_ZN2cv3MatD1Ev[cv::Mat::~Mat()]+0x66): undefined reference to `cv::Mat::deallocate()'
build/Release/Cygwin-Windows/main.o:main.cpp:(.text$_ZN2cv3MatD1Ev[cv::Mat::~Mat()]+0x5e): undefined reference to `cv::fastFree(void*)'
collect2: ld returned 1make[2]: Leaving directory `/cygdrive/f/Proyectos/C++/OpenCV23Sandbox'
make[1]: Leaving directory `/cygdrive/f/Proyectos/C++/OpenCV23Sandbox'
 exit status
make[2]: *** [dist/Release/Cygwin-Windows/opencv23sandbox.exe] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 2s)


Trying with MinGW libs:

"/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .clean-conf
make[1]: Entering directory `/f/Proyectos/C++/OpenCV23Sandbox'
rm -f -r build/Release
rm -f dist/Release/MinGW-Windows/opencv23sandbox.exe
make[1]: Leaving directory `/f/Proyectos/C++/OpenCV23Sandbox'

CLEAN SUCCESSFUL (total time: 350ms)
"/bin/make" -f nbproject/Makefile-Release.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/f/Proyectos/C++/OpenCV23Sandbox'
"/bin/make"  -f nbproject/Makefile-Release.mk dist/Release/MinGW-Windows/opencv23sandbox.exe
make[2]: Entering directory `/f/Proyectos/C++/OpenCV23Sandbox'
mkdir -p build/Release/MinGW-Windows
rm -f build/Release/MinGW-Windows/main.o.d
g++.exe    -c -O2 -I/C/OpenCV2.3/build/include -MMD -MP -MF build/Release/MinGW-Windows/main.o.d -o build/Release/MinGW-Windows/main.o main.cpp
mkdir -p dist/Release/MinGW-Windows
g++.exe     -o dist/Release/MinGW-Windows/opencv23sandbox build/Release/MinGW-Windows/main.o -L../OpenCV/OpenCV2.3/build/x86/mingw/lib ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_calib3d230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_contrib230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_core230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_features2d230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_flann230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_gpu230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_highgui230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_imgproc230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_legacy230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_ml230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_objdetect230.dll.a ../OpenCV/OpenCV2.3/build/x86/mingw/lib/libopencv_video230.dll.a 
build/Release/MinGW-Windows/main.o:main.cpp:(.text+0x4f): undefined reference to `cv::Mat::eye(int, int, int)'
build/Release/MinGW-Windows/main.o:main.cpp:(.text+0xac): undefined reference to `cv::fastFree(void*)'
build/Release/MinGW-Windows/main.o:main.cpp:(.text+0x11a): undefined reference to `cv::fastFree(void*)'
build/Release/MinGW-Windows/main.o:main.cpp:(.text+0x191): undefined reference to `cv::fastFree(void*)'
build/Release/MinGW-Windows/main.o:main.cpp:(.text+0x1a7): undefined reference to `cv::Mat::deallocate()'
build/Release/MinGW-Windows/main.o:main.cpp:(.text+0x1ba): undefined reference to `cv::Mat::deallocate()'
build/Release/MinGW-Windows/main.o:main.cpp:(.text+0x1ce): undefined reference to `cv::Mat::deallocate()'
build/Release/MinGW-Windows/main.o:main.cpp:(.text$_ZN2cv3MatD1Ev[cv::Mat::~Mat()]+0x74): undefined reference to `cv::Mat::deallocate()'
build/Release/MinGW-Windows/main.o:main.cpp:(.text$_ZN2cv3MatD1Ev[cv::Mat::~Mat()]+0x63): undefined reference to `cv::fastFree(void*)'
collect2: ld returned 1 exit status
make[2]: Leaving directory `/f/Proyectos/C++/OpenCV23Sandbox'
make[1]: Leaving directory `/f/Proyectos/C++/OpenCV23Sandbox'
make[2]: *** [dist/Release/MinGW-Windows/opencv23sandbox.exe] Error 1
make[1]: *** [.build-conf] Error 2
make: *** [.build-impl] Error 2

BUILD FAILED (exit value 2, total time: 1s)

or

g++.exe     -o dist/Release/MinGW-Windows/opencv23sandbox build/Release/MinGW-Windows/main.o -L../OpenCV/OpenCV2.3/build/x86/mingw/lib -lopencv_calib3d230.dll -lopencv_contrib230.dll -lopencv_core230.dll -lopencv_features2d230.dll -lopencv_flann230.dll -lopencv_gpu230.dll -lopencv_highgui230.dll -lopencv_imgproc230.dll -lopencv_legacy230.dll -lopencv_ml230.dll -lopencv_objdetect230.dll -lopencv_video230.dll 

same result.

解决方案

Are you using the precompiled MinGW libraries? (it appears so). I tried for a couple of days to get my project to link successfully under Code::Blocks. I was seeing the same sort of errors you describe (bad references, etc).

I finally recompiled OpenCV using the steps shown here, and all became well.

这篇关于OpenCV 2.3不编译,未定义的引用错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆