官方 AnacondaRecipes/opencv-feedstock 的 conda-build 无法查找 libpng.h

Posted

技术标签:

【中文标题】官方 AnacondaRecipes/opencv-feedstock 的 conda-build 无法查找 libpng.h【英文标题】:conda-build of official AnacondaRecipes/opencv-feedstock fails looking for libpng.h 【发布时间】:2018-03-22 16:07:35 【问题描述】:

我已经下载了opencv in AnacondaRecipes的官方conda配方。

我试图构建这个包执行:

conda-build recipe -c conda-forge

当配方编译 opencv 时,我在执行 [ 72%] Built target opencv_dnn 时收到以下错误。错误如下:

[ 67%] Building CXX object modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_png.cpp.o
/opt/conda/conda-bld/opencv_1521187259162/work/modules/imgcodecs/src/grfmt_png.cpp:62:10: fatal error: libpng/png.h: No such file or directory
 #include <libpng/png.h>
          ^~~~~~~~~~~~~~
compilation terminated.
modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/build.make:326: recipe for target 'modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_png.cpp.o' failed
make[2]: *** [modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/src/grfmt_png.cpp.o] Error 1
CMakeFiles/Makefile2:4645: recipe for target 'modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/all' failed
make[1]: *** [modules/imgcodecs/CMakeFiles/opencv_imgcodecs.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....

查看$PREFIX目录,没有libpng文件夹,只有libpng16文件夹:

/opt/conda/conda-bld/opencv_1521187259162/_h_env_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placehold_placeh/include/

我怀疑它一定与 conda-build 如何管理路径环境有关,但我不知道如何解决它。

环境:conda 4.4.11,操作系统:Ubuntu 16.04。

2018 年 3 月 23 日更新

我也试过了:

libpng/png.h 添加到$PREFIX 目录指向的位置。 将/usr/include 添加到$PATH

这两种情况都没有成功。

2018 年 4 月 3 日更新

libpng-dev 已安装在环境中。

2018 年 9 月 4 日更新

Docker recipe to reproduce environment

2018 年 12 月 4 日更新

Docker recipe using miniconda3 and installing conda in /usr/local/conda instead of /opt/conda

【问题讨论】:

如果你把来自libpng.sourceforge.io/index.html的libpng放在需要的位置呢? 我已经用新的测试更新了这个问题。您认为哪个位置正确? 你用的是什么平台? 平台是什么意思?我在具有所需依赖项的 Ubuntu 16.04 以及我可以共享以重现问题的 docker 映像中都收到错误。 Contact 构建环境通常与系统隔离。您可以显式设置环境变量以包含在会话中,但其他变量会被删除,因此在路径中设置内容应该无关紧要。您是否尝试过使用 miniconda3 而不是 2? 【参考方案1】:

所以你遇到的问题是你需要在你的操作系统上安装libpng-dev 库。由于您提到您在 Ubuntu 环境中运行,您可以简单地输入

sudo apt-get install libpng-dev

希望这能解决问题!

更新

你为什么不尝试使用链接中提供的命令安装opencv:

conda config --add channels conda-forge
conda install opencv

【讨论】:

我忘了提到确实安装了 libpng-dev,无论是在裸机 Ubuntu 还是在 docker 映像中。我相应地更新了问题。 好的,所以我阅读了您的食谱并认为我找到了问题所在。但因为我的 C 编程有点生疏,我翻阅了几本书,阅读了几个论坛主题,现在非常确信我的预感是正确的。您的问题来自here。从配方中删除 -p /opt/conda 并再次运行它。这次它应该安装肯定。我将在下一条评论中解释原因,因为我相信我的空间不足。 所以问题是当您运行 C 程序并使用 #include &lt;libpng/png.h&gt; 时,您是在告诉编译器(预处理器)包含的头文件是您的代码的预定义代码。 &lt;&gt; 告诉在标准 C 标头位置进行搜索。您可以使用 的“”脚背,它告诉我们在本地目录中的第一次搜索。因此,我们知道包含正在文件系统中进行搜索。如果您输入whereis png.h,您将得到/usr/include/png.h/usr/local/include/png.h 如果您查看conda forge 的配方,它使用make 因此您需要将 anaconda 安装在 /usr/local/ 中,因为 conda forge 使用 make。回想一下 /usr/local 是安装管理员构建的文件的地方,通常使用 make 命令。这个想法是为了避免与作为操作系统一部分的文件发生冲突,否则这些文件将被覆盖或覆盖本地文件。另一方面,/opt 是一个用于安装非捆绑包的目录(即不属于 OS 发行版,但由独立源提供的包)但是,您的 anaconda 正在使用 OS c 库。因此需要在 /usr/local 希望能解决您的问题!顺便说一句,这是一个link,我发现它比我更好地描述了/opt/usr 之间的区别。 jlliagre 给出了一个惊人的答案。请让我知道它是否有效! (或者如果它不成功)干杯!

以上是关于官方 AnacondaRecipes/opencv-feedstock 的 conda-build 无法查找 libpng.h的主要内容,如果未能解决你的问题,请参考以下文章

Nginx官方文档翻译(转)

[翻译]ElasticSearch官方文档

Retrofit 官方文档

如何刷回官方的recovery

yolov5为啥不被官方认可

Chat--GPT-官方最新API官方免费PC版-Chat官方API