• 欢迎浏览“String me = Creater\忠实的资深Linux玩家;”,请文明浏览,理性发言,有侵犯你的权益请邮件我(creater@vip.qq.com).
  • 把任何的失败都当作一次尝试,不要自卑;把所有的成功都想成是一种幸运,不要自傲。
  •    2年前 (2016-05-03)  Linux Linux应用 OpenCv QT |   抢沙发  24 
    文章评分 0 次,平均分 0.0

    发现一个奇怪的现象,OpenCv代码在直接使用g++或者cmake+make编译后代码能正常跑出效果,但是以Qt组织工程后,任何涉及到OpenCv的代码都导致程序崩溃,比如segment error(段错误),relloc error或者the inferior has stopped because receive a signal的错误,经过多次实验排查,定位到问题。

    现象:
    使用原生的g++编译没问题

    g++  -ggdb `pkg-config --cflags opencv` main.cpp -o main `pkg-config --libs opencv`  

    使用Cmake没问题,CMakeLists.txt内容如下:

    ######## A simple cmakelists.txt file for OpenCV() #############
    cmake_minimum_required(VERSION 2.8)
    PROJECT(ShowImage)
    FIND_PACKAGE( OpenCV REQUIRED )   
    INCLUDE_DIRECTORIES( 
      ${ShowImage_SOURCE_DIR}
    )
    ADD_EXECUTABLE(ShowImage main.cpp)  
    TARGET_LINK_LIBRARIES (ShowImage ${OpenCV_LIBS} )
    cmake .
    make

    在QtCreator中,配置文件中加有

    INCLUDEPATH+=/usr/local/include\
    /usr/local/include/opencv\
    /usr/local/include/opencv2
    LIBS+=/usr/local/lib/libopencv_highgui.so\
    /usr/local/lib/libopencv_core.so\
    /usr/local/lib/libopencv_imgproc.so\
    /usr/local/lib/libopencv_imgcodecs.so \
    /usr/local/lib/libopencv_superres.so \
    /usr/local/lib/libopencv_videoio.so \
    /usr/local/lib/libopencv_calib3d.so \
    /usr/local/lib/libopencv_video.so \
    /usr/local/lib/libopencv_features2d.so \
    /usr/local/lib/libopencv_videostab.so \
    /usr/local/lib/libopencv_flann.so \
    /usr/local/lib/libopencv_highgui.so \
    /usr/local/lib/libopencv_imgcodecs.so \
    /usr/local/lib/libopencv_imgproc.so \
    /usr/local/lib/libopencv_ml.so \
    /usr/local/lib/libopencv_objdetect.so 

    但是程序总是停止运行。

    解决办法:
    首先

    qmake -v
    QMake version 2.01a
    Using Qt version 4.8.6 in /usr/lib/x86_64-linux-gnu

    可以看出当前该系统安装的Qt版本。在编译OpenCv时带的参数WITH_QT=ON选项会导致OpenCv编译时使用qt4,应该是这种关联导致冲突或者不匹配。
    你现在可以这样做:

    cd build
    make uninstall
    make clean
    cd ..
    rm -rf build

    即卸载,清除,删除文件夹,现在只需要将opencv重新编译一遍即可,注意去掉WITH_QT=ON选项。

     

    除特别注明外,本站所有文章均为String me = "Creater\忠实的资深Linux玩家";原创,转载请注明出处来自http://unix8.net/home.php/4847.html

    关于

    发表评论

    暂无评论

    切换注册

    登录

    忘记密码 ?

    切换登录

    注册

    扫一扫二维码分享