Как использовать pkg-config в qt для кросскомпиляции

После того, как я успешно перекомпилировал qt5.5.1 и opencv3.1.0, также существует проблема (расстроена!).

Позвольте мне сказать это в datail:

a. На моем компьютере ubunutu при компиляции программ qt с помощью opencv у меня обычно есть два способа:

первый находится в qt IDE, я добавляю две дополнительные строки в .pro

#.pro
CONFIG += link_pkgconfig
PKGCONFIG += opencv 

второй находится в терминале, например, в командной строке:

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

Я знаю, почему я могу использовать pkg-config при запуске

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 `jpeg_set_defaults@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_dict_free@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_alloc_huff_table@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_expand_gray_1_2_4_to_8@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avformat_free_context@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_read_end@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_write_info@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_swap@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_gray_to_rgb@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avformat_open_input@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `sws_getCachedContext@LIBSWSCALE_4'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_write_trailer@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_CreateCompress@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_free@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_read_info@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_destroy_read_struct@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avformat_find_stream_info@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avio_open@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_guess_codec@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_set_quality@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avpicture_get_size@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_read_image@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_stdio_src@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_create_read_struct@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_rgb_to_gray@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_filter@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_frame_free@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_log_set_level@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_init_io@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_IHDR@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_get_IHDR@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_free_packet@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_create_write_struct@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_read_update_info@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_seek_frame@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_write_frame@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_longjmp_fn@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avpicture_fill@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_resync_to_restart@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_destroy_compress@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_get_tRNS@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_dict_set@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_rescale_q@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avformat_get_riff_video_tags@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_finish_decompress@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_write_end@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avcodec_get_context_defaults3@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avformat_network_init@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avformat_write_header@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_read_fn@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_bgr@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avformat_get_mov_video_tags@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `sws_freeContext@LIBSWSCALE_4'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_write_scanlines@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_destroy_write_struct@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_frame_alloc@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_read_header@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `sws_getContext@LIBSWSCALE_4'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_CreateDecompress@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_finish_compress@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avcodec_find_encoder@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_start_decompress@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_create_info_struct@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_compression_strategy@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_init_packet@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_interlace_handling@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_strip_alpha@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_compression_level@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_reduce@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_malloc@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avcodec_encode_video2@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_freep@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avio_close@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_read_frame@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avcodec_flush_buffers@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avcodec_decode_video2@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_quality_scaling@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_start_compress@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avformat_alloc_context@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_error@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_sub_q@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_guess_format@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_simple_progression@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avformat_new_stream@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `sws_scale@LIBSWSCALE_4'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_destroy_decompress@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_std_error@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_write_image@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avcodec_find_decoder@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_stdio_dest@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_register_all@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined  reference to `png_get_io_ptr@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined  reference to `png_set_write_fn@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined     reference to `avcodec_open2@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_packing@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_codec_get_tag@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_palette_to_rgb@PNG16_0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_lockmgr_register@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_default_qtables@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_opt_set@LIBAVUTIL_55'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_calc_output_dimensions@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avcodec_close@LIBAVCODEC_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `av_codec_get_id@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_videoio.so: undefined reference to `avformat_close_input@LIBAVFORMAT_57'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `jpeg_read_scanlines@LIBJPEG_9.0'
/home/newdisk/optnew/opencv-arm/lib/libopencv_imgcodecs.so: undefined reference to `png_set_strip_16@PNG16_0'
collect2: ld returned 1 exit status

Кроме того, кросскомпилятор установлен в

/home/newdisk/optnew/opt/FriendlyARM/toolschain/4.5.1/bin

кросскомпиляция qt установлена ​​в

/home/newdisk/optnew/qt5.5.1

crosscompile opencv установлен в

/home/newdisk/optnew/opencv-arm

3rdparty crosscompile opencv установлен в

/home/newdisk/optnew/opencv-rely

3rdparty opencv:

zlib
jpeg
libpng
yasm
x264
xvidcore
ffmpeg

Как мне установить переменные среды, чтобы pkg-config работал хорошо, чтобы мои программы могли находить каталоги opencv, а также opencv-rely include и lib?


person Little Tooth    schedule 16.06.2017    source источник
comment
Если версии 2.4.9 opencv достаточно, вы можете установить пакеты armhf из репозиториев Ubuntu. Включите поддержку мультиархитектуры в dpkg, установите версии пакетов armhf вместе с обычным amd64. Я использую третий способ настройки проекта при мультиархитектурных сборках — CMake (вариант .pro тоже должен работать, но я им никогда не пользовался).   -  person Velkan    schedule 16.06.2017
comment
Прошлой ночью я попытался добавить сторонние библиотеки opencv и opencv в qt .pro с явным абсолютным путем, как и ответ, который я разместил ниже. Я понял твой смысл. Cmake также является способом кросскопирования. Является ли qt или cmake просто инструментом. Я новичок, когда я создал opencv для своей доски для рук, я немного прикоснулся к cmake. @Velkan   -  person Little Tooth    schedule 17.06.2017


Ответы (1)


Прошлой ночью я попробовал самый прямой способ, добавив сторонние библиотеки opencv и opencv следующим образом:

#.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

И я перекомпилировал программы qt и успешно запустил их на своей доске, что также показало, что моя конфигурация правильная.

Интересно, у кого-нибудь из вас есть несколько простых способов поиска относительных библиотек, будь то в qt, в cmake или просто в termial. Я зеленая рука, и искренне благодарю за ответ!

person Little Tooth    schedule 17.06.2017