【问题标题】:How do I resolve this make fatal error: numpy/arrayobject.h: No such file or directory?如何解决这个致命错误:numpy/arrayobject.h:没有这样的文件或目录?
【发布时间】:2020-07-30 12:33:04
【问题描述】:

我的makefile 中有以下 sn-p(第一行是我在网上找到它作为候选解决方案后添加的 - 不幸的是,它不起作用):

$(shell set(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} /usr/local/lib/python3.5/dist-packages/numpy/core/include))

all: obj $(EXEC) link
$(EXEC): $(OBJS)
    $(CC) $(COMMON) -I./src/factor $(CFLAGS) $^ -o $@ $(LDFLAGS)
    $(CC) -shared $(COMMON) -I./src/factor $(CFLAGS) $^ -o $(SHAREDLIB) $(LDFLAGS)
$(OBJDIR)%.o: %.c $(DEPS)
    $(CC) $(COMMON) -I./src/factor $(CFLAGS) -c $< -o $@

我验证了numpy/arrayobject.h 在我的系统上的/usr/local/lib/python3.5/dist-packages/numpy/core/include 中。执行make 后我得到:

gcc -I ./include -I/usr/include/python3.5 -DGPU -I/usr/local/cuda-10.0/include/ -DCUDNN  -I./src/factor -Wall -Wfatal-errors -fPIC -Ofast -DGPU -DCUDNN -c ./src/ComputationPy.c -o obj/ComputationPy.o
./src/ComputationPy.c:12:31: fatal error: numpy/arrayobject.h: No such file or directory
compilation terminated.
Makefile:51: recipe for target 'obj/ComputationPy.o' failed
make: *** [obj/ComputationPy.o] Error 1

第51行对应sn-p的最后一行。

【问题讨论】:

  • 你通过确保有这样的文件或目录来解决这个错误..
  • 或者通过将引用更改为实际位置。这可能不是生成文件错误,而是包含错误。
  • 如果你确定所有的语法都是正确的,但仍然看到这个错误,那么看看这个关于Cmake is not able to find Python-libraries的对话
  • $(shell ...) 构造没有做任何有用的事情。如果您希望它将/usr/local/lib/python3.5/dist-packages/numpy/core/include 添加到名为PYTHON_INCLUDE_DIRS 的Make 变量中,那么这就是您的问题。请改用+=
  • 设置一个shell变量如果你不使用它是没有效果的。您的构建中需要一个-I,包括该目录

标签: python c numpy makefile gnu-make


【解决方案1】:

如果没有看到完整的 Makefile,很难确定出了什么问题,但这一行看起来不可能是正确的:

$(shell set(PYTHON_INCLUDE_DIRS ${PYTHON_INCLUDE_DIRS} /usr/local/lib/python3.5/dist-packages/numpy/core/include))

在 GNU make 中,$(shell ...) 运行 sh -c "..." [技术上,$(SHELL) -c "...") 并评估该命令在其标准输出上打印的任何内容。 set(...) 不是有效的 sh 语法,而且 inside $(shell ...) 的东西不能改变 Make 变量。我希望这一行会在生成日志中打印一条错误消息,例如

sh: 1: Syntax error: word unexpected (expecting ")")

否则无效。

假设这里的目标是将/usr/local/lib/python3.5/dist-packages/numpy/core/include 附加到Make 变量PYTHON_INCLUDE_DIRS 的值上,这样做的方法是使用+=

PYTHON_INCLUDE_DIRS += /usr/local/lib/python3.5/dist-packages/numpy/core/include

您引用的规则没有直接使用此变量,但我怀疑可能在 $(COMMON) 中隐藏了对它的引用。

【讨论】:

    猜你喜欢
    • 2017-12-06
    • 2013-01-17
    • 2021-02-14
    • 1970-01-01
    • 2019-10-05
    • 2017-05-09
    • 2021-05-15
    • 2014-10-31
    相关资源
    最近更新 更多