如何在qt中使用pkg-config进行交叉编译
问题描述:
我已经成功编译过qt5.5.1和opencv3.1.0,还存在问题(不满!)。如何在qt中使用pkg-config进行交叉编译
让我说,它在datail:
a.On我的电脑ubunutu,当编译OpenCV的QT程序,我通常有两种方式,
第一是QT IDE,我添加了两个额外的在的.pro
#.pro
CONFIG += link_pkgconfig
PKGCONFIG += opencv
第二线是在终端中,例如命令行:
g++ main.cpp -o main `pkg-config opencv --cflags --libs`
我知道为什么我可以使用pkg配置,运行
echo $PKG_CONFIG_PATH
当我之所以得到:
:/usr/local/opencv-3.1.0/lib/pkgconfig:/usr/local/opencv-3.1.0/lib/pkgconfig:
湾而对于交叉编译,我该如何使用pkg-config?
我试图通过添加编辑/home/lmk/.bashrc:
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/newdisk/optnew/opencv-arm/lib/pkgconfig
export PKG_CONFIG_PATH
,然后打开一个新的终端,运行:
echo $PKG_CONFIG_PATH
这给了我:
:/usr/local/opencv-3.1.0/lib/pkgconfig:/usr/local/opencv-3.1.0/lib/pkgconfig:/home/newdisk/optnew/opencv-arm/lib/pkgconfig
问题是: 首先,在qt IDE中编辑.pro
#.pro
CONFIG += link_pkgconfig
PKGCONFIG += arm-opencv
结果是:
:-1: error: arm-opencv development package not found
其次,当在终端:
arm-linux-g++ `pkg-config arm-opencv --cflags --libs` show.cpp -lpthread -lrt -o show
/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.1/../../../../arm-none-linux-gnueabi/bin/ld: warning: libavcodec.so.57, needed by /home/newdisk/optnew/opencv-arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.1/../../../../arm-none-linux-gnueabi/bin/ld: warning: libavformat.so.57, needed by /home/newdisk/optnew/opencv-arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.1/../../../../arm-none-linux-gnueabi/bin/ld: warning: libavutil.so.55, needed by /home/newdisk/optnew/opencv-arm/li/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.1/../../../../arm-none-linux-gnueabi/bin/ld: warning: libswscale.so.4, needed by /home/newdisk/optnew/opencv-arm/lib/libopencv_highgui.so, not found (try using -rpath or -rpath-link)
/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.1/../../../../arm-none-linux-gnueabi/bin/ld: warning: libjpeg.so.9, needed by /home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so, not found (try using -rpath or -rpath-link)
/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin/../lib/gcc/arm-none-linux-gnueabi/4.5.1/../../../../arm-none-linux-gnueabi/bin/ld: warning: libpng16.so.16, needed by /home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so, not found (try using -rpath or -rpath-link)
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_4'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_4'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_4'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_4'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avco[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `[email protected]_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `[email protected]_0'
collect2: ld returned 1 exit status
在addtion中,交叉编译安装在
/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin
crosscompile Qt是安装在
/home/newdisk/optnew/qt5.5.1
crosscompile OpenCV的安装在
/home/newdisk/optnew/opencv-arm
crosscompile的OpenCV的的3rdParty安装在
/home/newdisk/optnew/opencv-rely
的OpenCV的的3rdParty是:
zlib
jpeg
libpng
yasm
x264
xvidcore
ffmpeg
我应该怎么设置我的环境变量使pkg-config工作得很好,这样我的程序ams可以找到opencv以及opencv-depend的include和lib目录吗?
答
昨晚,我加入OpenCV的和OpenCV的的3rdParty库这样的尝试最直接的方法:
#.pro
######################################################################
# Automatically generated by qmake (3.0) Mon Nov 14 13:01:31 2016
######################################################################
QT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TEMPLATE = app
TARGET = ImageShow
INCLUDEPATH += .
# Input
HEADERS += mywidget.h
SOURCES += main.cpp mywidget.cpp
INCLUDEPATH+=/home/newdisk/optnew/opencv-arm/include
LIBS += /home/newdisk/optnew/opencv-arm/lib/libopencv_*.so \ //all opencv libs
/home/newdisk/optnew/opencv-rely/lib/libavcodec.so \ //opencv's 3rdparty libs
/home/newdisk/optnew/opencv-rely/lib/libavdevice.so \
/home/newdisk/optnew/opencv-rely/lib/libavfilter.so \
/home/newdisk/optnew/opencv-rely/lib/libavformat.so \
/home/newdisk/optnew/opencv-rely/lib/libavutil.so \
/home/newdisk/optnew/opencv-rely/lib/libjpeg.so \
/home/newdisk/optnew/opencv-rely/lib/libpng.so \
/home/newdisk/optnew/opencv-rely/lib/libpostproc.so \
/home/newdisk/optnew/opencv-rely/lib/libswresample.so \
/home/newdisk/optnew/opencv-rely/lib/libswscale.so \
/home/newdisk/optnew/opencv-rely/lib/libx264.so \
/home/newdisk/optnew/opencv-rely/lib/libxvidcore.so \
/home/newdisk/optnew/opencv-rely/lib/libz.so
我crosscompiled Qt的程序并运行它在我的手臂板成功地,这也说明,我的配置是对的。
我想知道你们中的任何人都有一些简单的方法来筛选相关库,无论是在qt中,还是在cmake中,或者只是在最后阶段。我是一只绿色的手,衷心感谢您的回复!
如果2.4.9版本的opencv足够了,那么你可以从Ubuntu库安装armhf软件包。在dpkg中启用multiarch支持,在通常的amd64旁边安装软件包的armhf版本。在进行多架构构建时,我使用“第三种方式”来设置项目--CMake(.pro选项也应该可以工作,但我从来没有使用它)。 – Velkan
昨晚,我试图用明确的绝对路径将opencv和opencv的第三方库添加到qt .pro中,就像我在下面发布的anwser一样。我有你的意思。 Cmake也是一种交叉的方式。无论是qt还是cmake只是一个工具。我是一个初学者,当我为arm板建立opencv时,我碰到了cmake。@ Velkan –