2011-08-09 112 views
4

我在Windows 7 64位和Netbeans 7.0中使用的OpenCV。我试着使用MinGW和cygwin编译下一个代码,但是两个都失败并导致未定义的引用。OpenCV的2.3不能编译,未定义的引用错误

当我使用MAT或FLANN和其他人我不能编译,但我将所有的库(我试过只增加调试者,发布者,才需要的...但失败)。

在Ubuntu相同的代码工作,但我需要编译它在Windows了。我使用2.3编译版本(使用CMake)和可安装版本。

#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) 

使用MinGW库试图:

"/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) 

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 

相同的结果。

回答

3

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

我终于重新编译的OpenCV使用here所示的步骤,都成了很好。

+0

ü...我在Windows 7中,我试过之前和除cv :: Mat或cv之外的所有作品:flann,我添加了libreries ...嗯,我会试着用MinGW而不是VS10编译它们。 – Wiliam

+0

已经工作了,谢谢。 – Wiliam

3

我想问题是库路径指向vc10目录(-L/cygdrive/C/OpenCV2.3/build/x86/vc10/lib)而不是mingw目录(-L/cygdrive/C/OpenCV2.3/build/x86/mingw/lib)。 ld-linker找不到方法,因为它们被vC++“link.exe”损坏。

如果您使用64位,那么您也可以链接到64位库: -L/cygdrive/C/OpenCV2.3/build/x64/mingw/lib

+0

感谢但没有工作:( – Wiliam

+0

您是否使用64位窗口?那么您必须链接到64位版本:'-L/cygdrive/C/OpenCV2.3/build/x64/mingw/lib'。 – vstm

+0

使用64位的库仅用于优化,无论如何我尝试了它和同样的错误。再次感谢。 – Wiliam

0

我有完全相同的问题。我想用MinGW在64位Windows 7机器下编译我的程序。下面是几种可能性,可能导致问题:

1)你必须确保OpenCV2.3/build/x64/mingw/lib链接。请小心,不要将项目链接到Visual Studio的库或x86的libs库。

2)确保正确的dll被复制到项目目录,或者已被添加到PATH。例如,如果你使用这个lib libopencv_core243.dll.a,你应该确保libopencv_core243.dll可以被项目加载。这不是问题的原因。但我认为知道这一点也很重要。

3)确保MinGW的可以编译x64程序。这是我使用的:mingw-w64(但是因为mingw-w64项目正在转向mingw-w64.org,所以最好使用新网站)。不幸的是,从MinGW32下载的那个不起作用。 MinGW的official site的链接将带你到第二个(MinGW32)。

4)默认情况下,MinGw可能会将您的项目编译为32位程序。为了确保它编译为64位,请添加此编译标志-m64。否则,如果您只将项目与所有64位库链接,则也会导致该问题。

相关问题