【问题标题】:QMake: how to choose version of library to link toQMake:如何选择要链接到的库版本
【发布时间】:2017-04-14 12:38:55
【问题描述】:

有一个使用 OpenCV 的简单计算机视觉应用程序。我在主机系统上编译它而不是部署到 NVidia Jetson TK1(这里没有问题,我使用 Qt Creator 和配置的工具包)。我使用sshfs 将Jetson 的文件系统根目录挂载到主机/mnt/sysroot_tegra_tk1

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

我的 .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 

【问题讨论】:

    标签: qt opencv computer-vision cross-compiling qmake


    【解决方案1】:

    问题解决了。关键时刻:

    1. 不同的版本放置在不同的位置(使用显式 soname 是一种选择,但在我的情况下,库放置在链接器默认范围之外)。
    2. 必须有正确的-rpath/-rpath-link 告诉链接器在哪里寻找。
    3. <path to Qt>/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
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多