官方 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 environment2018 年 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 <libpng/png.h>
时,您是在告诉编译器(预处理器)包含的头文件是您的代码的预定义代码。 <>
告诉在标准 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的主要内容,如果未能解决你的问题,请参考以下文章