Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt QMake:如何选择要链接到的库的版本_Qt_Opencv_Computer Vision_Cross Compiling_Qmake - Fatal编程技术网

Qt QMake:如何选择要链接到的库的版本

Qt QMake:如何选择要链接到的库的版本,qt,opencv,computer-vision,cross-compiling,qmake,Qt,Opencv,Computer Vision,Cross Compiling,Qmake,有一个简单的使用OpenCV的计算机视觉应用程序。我在主机系统上编译它,然后部署到NVidia Jetson TK1(这里没有问题,我使用Qt Creator和配置的工具包)。我使用sshfs将Jetson的文件系统根安装到主机/mnt/sysroot\u tegra\u tk1 问题是:我刚刚在Jetson上编译了OpenCV 3.2版(安装到board/usr/local/lib)。/usr/local中仍有系统OpenCV版本2.4。我不知道如何在主机系统上配置qmake来交叉编译和链接新

有一个简单的使用OpenCV的计算机视觉应用程序。我在主机系统上编译它,然后部署到NVidia Jetson TK1(这里没有问题,我使用Qt Creator和配置的工具包)。我使用
sshfs
将Jetson的文件系统根安装到主机
/mnt/sysroot\u tegra\u tk1

问题是:我刚刚在Jetson上编译了OpenCV 3.2版(安装到board
/usr/local/lib
)。
/usr/local
中仍有系统OpenCV版本2.4。我不知道如何在主机系统上配置qmake来交叉编译和链接新版本,而不是Jetson的默认系统

My.pro文件:

QT += core
QT -= gui

CONFIG += c++11

TARGET = markerExtractionChromakey
CONFIG += console
CONFIG -= app_bundle

unix: INCLUDEPATH += /usr/local/include
unix: QMAKE_LIBDIR = /usr/local/lib

unix: LIBS +=  -lopencv_imgproc\
               -lopencv_core.so\
               -lopencv_video\
               -lopencv_highgui\
               -lopencv_gpu

TEMPLATE = app

HEADERS += cameraworker.h

SOURCES += main.cpp \
           cameraworker.cpp

target.path = /home/ubuntu/alan/markerExtractionChromakey
target.files += markerExtractionChromakey
INSTALLS += target
项目链接输出:

/usr/bin/arm-linux-gnueabihf-g++ -Wl,-rpath-link,/mnt/sysroot_tegra_tk1/usr/lib
-Wl,-rpath-link,/mnt/sysroot_tegra_tk1/usr/lib/arm-linux-gnueabihf
-Wl,-rpath-link,/mnt/sysroot_tegra_tk1/lib/arm-linux-gnueabihf -mfloat-abi=hard
 --sysroot=/mnt/sysroot_tegra_tk1 -Wl,-rpath,/usr/local/qt5/lib
-o markerExtractionChromakey main.o cameraworker.o   -L/usr/local/lib
-lopencv_imgproc -lopencv_core -lopencv_video -lopencv_highgui 
-lopencv_gpu -L/opt/qt5_for_tegra/qt-everywhere-opensource-src-5.5.1/qtbase/lib 
-lQt5Core -L/mnt/sysroot_tegra_tk1/usr/lib 
-L/mnt/sysroot_tegra_tk1/lib/arm-linux-gnueabihf 
-L/mnt/sysroot_tegra_tk1/usr/lib/arm-linux-gnueabihf -lpthread 

问题解决了。关键时刻:

  • 不同的版本放置在不同的位置(使用显式soname是一个选项,但在我的例子中,库放置在链接器默认范围之外)
  • 必须有正确的
    -rpath/-rpath链接才能告诉链接器在哪里查找
  • /qt-everywhere-opensource-src-5.5.1/qtbase/mkspecs/devices/linux-Jetson-tk1-g++/qmake.conf
    中指定的Jetson的默认
    -rpath
    位置。只需在默认目录之前添加您的目录:

    QMAKE_INCDIR += \
        $$[QT_SYSROOT]/usr/local/include \
        $$[QT_SYSROOT]/usr/include \
        $$[QT_SYSROOT]/usr/include/arm-linux-gnueabihf
    
    QMAKE_LIBDIR += \
        $$[QT_SYSROOT]/usr/local/lib \
        $$[QT_SYSROOT]/usr/lib \
        $$[QT_SYSROOT]/lib/arm-linux-gnueabihf \
        $$[QT_SYSROOT]/usr/lib/arm-linux-gnueabihf
    
    QMAKE_LFLAGS += \
        -Wl,-rpath-link,$$[QT_SYSROOT]/usr/local/lib \
        -Wl,-rpath-link,$$[QT_SYSROOT]/usr/lib \
        -Wl,-rpath-link,$$[QT_SYSROOT]/usr/lib/arm-linux-gnueabihf \
        -Wl,-rpath-link,$$[QT_SYSROOT]/lib/arm-linux-gnueabihf