链接 QtCreator && OpenCv
Posted
技术标签:
【中文标题】链接 QtCreator && OpenCv【英文标题】:Linking QtCreator && OpenCv 【发布时间】:2011-12-19 01:19:50 【问题描述】:我在从 opencv(2.3.1) 链接库时遇到问题,找不到解决方法。 我将 qtCreator 与 mingw 和预构建的 vc10 动态库文件一起使用。 所以,这是我到目前为止所做的:
.pro 文件:
TEMPLATE = app
INCLUDEPATH += "E:/opencv/build/include/"
INCLUDEPATH += "E:/opencv/build/include/opencv/"
INCLUDEPATH += "E:/opencv/build/include/opencv2/"
INCLUDEPATH += $$PWD/../opencv/build/x86/vc10
DEPENDPATH += $$PWD/../opencv/build/x86/vc10
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../opencv/build/x86/vc10/lib/ -lopencv_core231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../opencv/build/x86/vc10/lib/ -lopencv_core231d
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../opencv/build/x86/vc10/lib/ -lopencv_highgui231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../opencv/build/x86/vc10/lib/ -lopencv_highgui231d
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../opencv/build/x86/vc10/lib/ -lopencv_imgproc231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../opencv/build/x86/vc10/lib/ -lopencv_imgproc231d
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../opencv/build/x86/vc10/lib/ -lopencv_calib3d231
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../opencv/build/x86/vc10/lib/ -lopencv_calib3d231d
...
我测试了一个使用 opencv 中的 highgui 库的应用程序,它编译并运行良好,但是当我尝试使用 cvPyrDown(来自 imgproc_c.h)时,它编译但无法正确加载库,它“意外退出”代码-1073741515。 我不明白为什么会这样。从 .pro 文件中可以看出,我像 highgui 一样链接了 imgproc 库,但它仍然无法正常工作! 有什么建议吗?
编辑
好的,问题是 Visual Studio 创建的库具有与 g++ 不同的命名约定,这就是它无法工作的原因。如果这是真的,我仍然无法解释为什么它可以与 highgui 库一起使用。任何想法?
【问题讨论】:
【参考方案1】:你不应该使用 Qt 的 MSVC 版本吗?
【讨论】:
Mingw 应该能够处理它..(它适用于 highgui 库..)【参考方案2】:这是哪个版本的 Opencv?我建议尝试最新的 2.3,并使用 CMake 而不是 .pro 文件,这是整个项目的构建系统。
然后你只需在 CMakeLists.txt 上 file->open-project,你就可以看看如何使用 CMake 设置示例。
如果这个是最新的,那么 1) highgui 使用 QT,因此它可能与 qt creator 一起玩得更好,并且 2) 在 windows 上使用 .pro 构建可能未经测试;不可避免地需要 CMake 也就不足为奇了。
编辑:查看库的 CMakeLists.txt 文件 ....
# CMakeLists.txt for /modules/highgui
#YV
if (HAVE_QT)
if (HAVE_QT_OPENGL)
set(QT_USE_QTOPENGL TRUE)
endif()
INCLUDE($QT_USE_FILE)
SET(_RCCS_FILES src/window_QT.qrc)
QT4_ADD_RESOURCES(_RCC_OUTFILES $_RCCS_FILES)
SET(_MOC_HEADERS src/window_QT.h )
QT4_WRAP_CPP(_MOC_OUTFILES $_MOC_HEADERS)
set(HIGHGUI_LIBRARIES $HIGHGUI_LIBRARIES $QT_LIBRARIES $QT_QTTEST_LIBRARY)
set(highgui_srcs $highgui_srcs src/window_QT.cpp $_MOC_OUTFILES $_RCC_OUTFILES )
endif()
if(WIN32)
if(NOT HAVE_QT)
set(highgui_srcs $highgui_srcs src/window_w32.cpp)
endif()
set(highgui_srcs $highgui_srcs src/cap_vfw.cpp src/cap_cmu.cpp src/cap_dshow.cpp)
if(HAVE_MIL)
set(highgui_srcs $highgui_srcs src/cap_mil.cpp)
endif()
endif()
if(UNIX)
if(NOT HAVE_QT)
if(HAVE_GTK)
set(highgui_srcs $highgui_srcs src/window_gtk.cpp)
endif()
endif()
....
endif()
但是“imgproc”的 CMakeLists.txt 并没有做任何具体的检查……只是把责任转嫁给 main opencv lib:
define_opencv_module(imgproc opencv_core)
【讨论】:
我使用的是最新版本的opencv(2.3.1)。如果库是用 msvc 构建的(使用 g++ 之外的另一种命名约定),highgui 使用 qt 真的很重要吗? 可能。你真的应该用mingw重建opencv......也使用cmake,而不是qmake......这就是OpenCV测试/开发的东西,如果你坚持使用qmake,你就会为自己设置不必要的障碍。以上是关于链接 QtCreator && OpenCv的主要内容,如果未能解决你的问题,请参考以下文章
大数据处理技术作业——使用HBase&MongoDB&MapReduce进行数据存储和管理