【问题标题】:Linking QtCreator && OpenCv链接 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 库一起使用。任何想法?

【问题讨论】:

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


    【解决方案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,你就会为自己设置不必要的障碍。
    猜你喜欢
    • 2013-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多