【发布时间】:2017-06-16 08:36:31
【问题描述】:
在我成功交叉编译了qt5.5.1和opencv3.1.0之后,也存在问题(不高兴!)。
让我用datail说吧:
a.在我的PC ubunutu上,使用opencv编译qt程序时,我一般有两种方式,
第一个是在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:
b.在进行交叉编译时,如何使用 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
交叉编译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 正常工作,以便我的程序可以找到 opencv 以及 opencv-rely 的 include 和 lib 目录?
【问题讨论】:
-
如果 2.4.9 版本的 opencv 就足够了,那么您可以从 Ubuntu 存储库安装 armhf 包。在 dpkg 中启用多架构支持,安装 armhf 版本的软件包以及通常的 amd64。在进行多架构构建时,我使用“第三种方式”来设置项目 - CMake(.pro 选项也应该可以工作,但我从未使用过它)。
-
昨晚,我尝试使用绝对路径将 opencv 和 opencv 的 3rdparty 库添加到 qt .pro,就像我在下面发布的 anwser 一样。我明白你的意思。 Cmake 也是交叉编译的一种方式。 qt 还是 cmake 都只是一个工具。我是一个初学者,当我为我的手臂板构建opencv时,我触摸了一点cmake。@Velkan
标签: qt opencv pkg-config