No package 'opencv' found引起的故事——Ubuntu环境变量与pkg-config

今天在使用一款相机的SDK时用到MakeFile进行编译,其诡异的语法令人头大不已,所以一开始出现问题时慌了阵脚,到最后一番折腾静下心来才找到问题之关键——环境变量pkg-config

遇到的问题是这样的:

Package opencv was not found in the pkg-config search path.
Perhaps you should add the directory containing `opencv.pc'
to the PKG_CONFIG_PATH environment variable
No package 'opencv' found

很简单,从字面意思即可看出是pkg-config的搜索路径里面找不到opencv.pc这个文件,所以需要我们将其路径添加到环境变量中好让编译器找到这个库,怎么添加,很简单。

找到opencv.pc所在文件夹,比如:/path/to/your/filedir
一般会在这个路径下/usr/local/lib/pkgconfig
设置为环境变量:
export PKG_CONFIG_PATH=/path/to/your/filedir/
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

1.什么是.pc文件?

每个库的开发者都会提供一个.pc文件,在安装该库时生成,主要是声明库的路径、头文件路径以及编译时的链接参数和需要链接的库。比如我的opencv-3.3.1-dev.pc文件:

# Package Information for pkg-config

prefix=/opt/ros/kinetic
exec_prefix=${prefix}
libdir=${exec_prefix}/lib/x86_64-linux-gnu
includedir_old=${prefix}/include/opencv-3.3.1-dev/opencv
includedir_new=${prefix}/include/opencv-3.3.1-dev

Name: OpenCV
Description: Open Source Computer Vision Library
Version: 3.3.1
Libs: -L${exec_prefix}/lib/x86_64-linux-gnu -lopencv_stitching3 -lopencv_superres3 -lopencv_videostab3 -lopencv_aruco3 -lopencv_bgsegm3 -lopencv_bioinspired3 -lopencv_ccalib3 -lopencv_cvv3 -lopencv_dpm3 -lopencv_face3 -lopencv_photo3 -lopencv_fuzzy3 -lopencv_hdf3 -lopencv_img_hash3 -lopencv_line_descriptor3 -lopencv_optflow3 -lopencv_reg3 -lopencv_rgbd3 -lopencv_saliency3 -lopencv_stereo3 -lopencv_structured_light3 -lopencv_viz3 -lopencv_phase_unwrapping3 -lopencv_surface_matching3 -lopencv_tracking3 -lopencv_datasets3 -lopencv_text3 -lopencv_dnn3 -lopencv_plot3 -lopencv_xfeatures2d3 -lopencv_shape3 -lopencv_video3 -lopencv_ml3 -lopencv_ximgproc3 -lopencv_calib3d3 -lopencv_features2d3 -lopencv_highgui3 -lopencv_videoio3 -lopencv_flann3 -lopencv_xobjdetect3 -lopencv_imgcodecs3 -lopencv_objdetect3 -lopencv_xphoto3 -lopencv_imgproc3 -lopencv_core3
Libs.private: -ldl -lm -lpthread -lrt
Cflags: -I${includedir_old} -I${includedir_new}

因为我的opencv是安装ROS时自带的,所以.pc文件的名字和路径都比较奇怪,一开始用locate opencv.pc没有找到,然后便尝试自己写这个文件结果没想到3版本的opencv动态库的名字里面也有3,导致编译时链接的库都找不到,又是一番折腾,心累/(ㄒoㄒ)/~~,所以大家有安装了opencv时一定要先仔细找一下这个文件。

有了这个文件pkg-config就可以在任意一台电脑上找到你要链接的库,而不需要你自己指定库的路径,大大提高了可拓展性。

2.什么是pkg-config?

简单的说就是向用户程序提供相应库的路径、版本号等信息的助手,一般用于Makefile。比如:

这正是我们用gcc编译链接时的CFLAGS参数,因此我们无需知道库的具体位置,只用pkg-config --libs --cflags这一行就可以搞定。如前所述,一个库的编译信息都包含在.pc文件里,pkg-config会自动在系统环境变量PKG_CONFIG_PATH指定的路径下面去找。若是没有找到,就会报文章开头的错误,这时只要把.pc文件的路径添加到该环境变量里即可。How simple it is!

pkg-config在makefile文件中的用法:

OPENCV_CFLAGS       = $(shell $(PKGCFG) --cflags opencv)

OPENCV_LIBS         = $(shell $(PKGCFG) --libs opencv)

其他

export 命令可以查看当前所有环境变量的值

echo $PKG_CONFIG_PATH查看当前环境变量值

locate 可以用于定位文件

apt-file search 可以用于查找文件

参考:

https://blog.csdn.net/u012365926/article/details/51315330

https://www.linuxidc.com/Linux/2015-10/124448.htm

https://www.linuxidc.com/Linux/2012-01/51949.htm

  • 8
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值