链接QtCreator&& OPENCV

时间:2011-12-19 01:19:50

标签: c++ qt opencv mingw dynamic-linking

我在从opencv(2.3.1)链接库时遇到问题,但找不到解决它的方法.. 我正在使用qtCreator和mingw以及预先构建的vc10动态lib文件。 所以,这是我到目前为止所做的事情:

.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文件中看到的那样我将imgproc libs链接起来就像highgui一样,但它仍然无法工作!
有什么建议吗?

修改

好的,问题是visual studio创建的库具有与g ++不同的命名约定,这就是为什么它不起作用..如果这是真的,我仍然无法解释为什么它适用于highgui库..任何想法?

2 个答案:

答案 0 :(得分:1)

你不应该使用Qt的MSVC版本吗?

答案 1 :(得分:0)

这是哪个版本的Opencv?我建议尝试最新的2.3,并使用CMake而不是.pro文件,这是整个项目的构建系统。

然后你只需要在CMakeLists.txt上文件 - >打开项目,你就可以看看如何使用CMake设置示例。

如果 最新,那么1)highgui使用QT,因此它可能会更好地与qt创建者和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没有做任何特定的检查......只是将降压传递给主opencv lib:

 define_opencv_module(imgproc opencv_core)