如何在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目录吗?

+0

如果2.4.9版本的opencv足够了,那么你可以从Ubuntu库安装armhf软件包。在dpkg中启用multiarch支持,在通常的amd64旁边安装软件包的armhf版本。在进行多架构构建时,我使用“第三种方式”来设置项目--CMake(.pro选项也应该可以工作,但我从来没有使用它)。 – Velkan

+0

昨晚,我试图用明确的绝对路径将opencv和opencv的第三方库添加到qt .pro中,就像我在下面发布的anwser一样。我有你的意思。 Cmake也是一种交叉的方式。无论是qt还是cmake只是一个工具。我是一个初学者,当我为arm板建立opencv时,我碰到了cmake。@ Velkan –

昨晚,我加入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中,或者只是在最后阶段。我是一只绿色的手,衷心感谢您的回复!