【问题标题】:Should gcc find Python.h without being passed -I/usr/include/python2.7/?gcc 是否应该在不通过 -I/usr/include/python2.7/ 的情况下找到 Python.h?
【发布时间】:2017-09-05 06:23:21
【问题描述】:

我在RedHat上写了一个小c程序:

#include <Python.h>
#include <stdio.h>

int main() {
    printf("Hello, Python!\n");
    return 0;
}

并得到以下错误:

main.c:1:20:致命错误:Python.h:没有这样的文件或目录

于是我找到了以下答案:fatal error: Python.h: No such file or directory

安装了python-devel。我验证 /usr/include/python2.7/Python.h 存在,但仍然出现相同的错误。

当然,当运行gcc main.c -I/usr/include/python2.7/ 时,一切都编译得很好。

我的问题是:

在编译时添加 -I/usr/include/python2.7/ 是否正确,或者是否存在 gcc 应该期望的某种内置环境变量(类似于 PYTHON_DEV_HOME)。

我相信这是一个奇怪的问题,但我问的原因是因为我在 TensorFlow (git cloned) 上遇到了同样的错误,应该立即编译。既然不是,我认为我的环境缺少一些东西......

【问题讨论】:

  • stackoverflow.com/a/21530866/674064 好像表示这是正常的。
  • 不要设置任何环境变量,将-I/usr/include/python2.7明确传递给gcc。编写一个 makefile 来自动执行该任务。如果您正在创建其他人可以在他们的机器上构建的真实软件,您需要某种自动配置工具来根据本地环境自动构建 makefile 或类似的构建脚本。如果你只是在学习,你也可以只使用 `#include 而不是所有这些。

标签: python c++ c gcc


【解决方案1】:

这很正常。

您不能指望gcc 读取 Python 环境变量 - gcc 独立于 Python 并且与它没有任何连接。 Python 可以使用gcc,就像(可能)数千种其他产品一样,但其他编译器也应该可以使用。

gcc 列出了环境变量here。看一下CPATH,它可以用来代替-I,但请确保您准确阅读了它的作用。 C_INCLUDE_PATH 是另一种选择。

【讨论】:

  • 这个论点实际上是相反的——GCC 可以使用数千个库,其中一些库在 GCC 本身构建时甚至不存在。 GCC 如何知道/usr/include/RattleSnake1.0
【解决方案2】:

你通常应该用 -I 来指定它,但是 - 要回答这个问题 - 你也可以设置 CPATH 环境变量:

export CPATH=:/usr/include/python2.7/

gcc 将在这个目录中搜索包含而不需要任何额外的开关。

【讨论】:

    猜你喜欢
    • 2012-06-12
    • 1970-01-01
    • 2013-12-05
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多