如何解决make编译错误:numpy/arrayobject.h: 没有该文件或目录?
解决Makefile中无法找到numpy头文件的问题
你尝试用$(shell set(...))来添加numpy的include路径,但这个方法行不通,原因很简单:
$(shell)会启动一个子shell执行命令,子shell里的环境变量修改不会传递回Makefile本身,所以你的PYTHON_INCLUDE_DIRS变量根本没被更新。- 从报错的编译命令也能看出来:
gcc ... -I/usr/include/python3.5 ...里并没有包含numpy的路径,编译器自然找不到numpy/arrayobject.h。
正确的解决方案
你需要直接在Makefile中把numpy的include路径添加到编译参数里,有两种简单的方式:
方式1:直接修改CFLAGS变量
找到你Makefile中定义CFLAGS的地方,把numpy的路径追加进去:
# 直接给CFLAGS添加numpy的include路径 CFLAGS += -I/usr/local/lib/python3.5/dist-packages/numpy/core/include
方式2:单独定义numpy路径变量,再合并到编译规则
如果想让代码更清晰,可以单独定义变量,再在编译规则中引用:
# 单独定义numpy的include路径 NUMPY_INCLUDE = /usr/local/lib/python3.5/dist-packages/numpy/core/include # 修改你的编译规则,加入numpy路径 $(OBJDIR)%.o: %.c $(DEPS) $(CC) $(COMMON) -I./src/factor -I$(NUMPY_INCLUDE) $(CFLAGS) -c $< -o $@
验证修改效果
修改后重新执行make,编译命令里应该会出现-I/usr/local/lib/python3.5/dist-packages/numpy/core/include,这样编译器就能找到numpy/arrayobject.h头文件了。
另外,记得删掉那行没用的$(shell set(...))代码哦。
内容的提问来源于stack exchange,提问作者ScruffyFluffy
相关产品推荐
相关产品推荐

