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

### 回答1: 这是一个警告信息,意思是在路径 '/usr/local/lib/pkgconfig/opencv.pc' 中的 opencv.pc 文件似乎是空的,而且 opencv 包中没有名为 name 的字段。 ### 回答2: 这个错误是由于Opencvpkgconfig文件路径存在问题,导致Opencv包没有找到正确的名称。pkgconfig是一个用于配置编译程序时使用的库文件的工具。而opencv.pcOpencv库的配置文件,通常存储在/usr/local/lib/pkgconfig/opencv.pc路径下。 因此,出现这个错表示这个文件是空的或者缺失了某些必需的配置项。这个问题通常可以通过重新安装Opencv库来解决,确保按照正确的步骤进行安装。如果重新安装还是没有解决问题,可以尝试升级Opencv库的版本,然后再次编译和运行代码。还可以手动检查一下/usr/local/lib/pkgconfig/opencv.pc文件是否存在,以及文件内容是否完整。 总之,针对这个问题,我们需要检查Opencv库是否正确安装,升级或重新安装库文件以解决问题。同时,我们也需要检查文件是否存在和文件内容是否完整来确定问题的原因。 ### 回答3: 这个问题的原因是opencv.pc文件内容为空,因此在使用pkg-config命令时无法获取名称字段,导致出现“package 'opencv' has no name: field”的报错信息。 pkg-config是一个管理计算机上已安装的库的工具,它通过使用.pc文件来提供相关信息。在这种情况下,opencv.pc文件是OpenCV库的配置文件,其中包含了与库相关的信息,例如库的路径和版本号等。然而,由于文件内容为空,pkg-config无法识别库的具体信息。 为了解决这个问题,我们需要检查opencv.pc文件是否存在,如果存在,我们需要检查文件内容是否为空。如果文件确实存在但为空,我们可以尝试重新安装OpenCV库,或者将已存在的opencv.pc文件从另一台计算机中复制到当前计算机上。如果文件不存在,则应该立即安装OpenCV库并确保文件被正确地安装在指定的路径下。 另外,我们也可以尝试手动创建opencv.pc文件,其中包含必要的信息来帮助pkg-config正确地识别库。该文件应该包含以下内容: prefix=/usr/local exec_prefix=${prefix} libdir=${exec_prefix}/lib includedir=${prefix}/include/opencv4 Name: opencv Description: OpenCV computer vision library Version: 4.5.2 Libs: -L${libdir} -lopencv_core -lopencv_imgproc -lopencv_highgui Cflags: -I${includedir} 这个文件中的所有路径都应该适用于计算机上安装的实际路径。完成后,我们需要将文件保存为opencv.pc并将其放置在pkg-config搜索路径中的适当目录下。 总之,我们可以通过重新安装OpenCV库、将存在的opencv.pc文件从其他计算机复制到当前计算机、手动创建opencv.pc文件等方法来解决“package file '/usr/local/lib/pkgconfig/opencv.pc' appears to be empty package 'opencv' has no name: field”这个报错信息。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值