【问题标题】:/usr/include Directory on WSL/usr/include WSL 上的目录
【发布时间】:2023-01-17 11:53:07
【问题描述】:

我在 Windows 上使用 WSL,在目录 /usr/include 中,我有一个名为 python3.8 的子目录。据我了解,/usr/include 包含 C 编译器的头文件。

我已经安装了 python3.10 但似乎 python3.8 默认存在于 WSL 中。因此,当我尝试使用 pybind11 与 C++ 进行 python 绑定时,我与 /usr/include 中的目录 python3.8 发生了一些冲突。

从我尝试在 C++ 中导入 pybind11 标头时得到的结果错误很明显,该程序正在寻找 /usr/include/python3.10(不存在)而不是 /usr/include/python3.8

作为解决方案,我在/usr/include 中创建了一个名为python3.10 的新目录,并复制了/usr/include/python3.8 中的所有内容。因此,问题消失了,程序运行正常,但我不太确定这是最好的方法。

编辑:

CMakeLists.txt 文件:

cmake_minimum_required(VERSION 3.4)
project(pybindproject)
add_subdirectory(pybind11)
pybind11_add_module(module_name main.cpp)

我有 pybind11 使用:git clone https://github.com/pybind/pybind11.git

【问题讨论】:

  • 请附上您的setup.py 和/或您的CMakeLists.txt,以便我们提供帮助。

标签: python linux windows-subsystem-for-linux pybind11


【解决方案1】:

找到python 3.10的安装位置,找到python 3.10文件夹下的include目录。

在 WSL 上,只要看看你安装 python 的位置,如果你是从压缩包安装的,可能在你的主目录中,然后添加到你的环境 C 包含路径:

export CPATH='/home/../Python-3.10.6/Include':$CPATH

如果您从命令行使用 GCC 进行编译,您还可以使用 -I 标志手动指定包含路径,如下所示:

g++ -I/whatever/path/to/python/include/dir foo.cpp

【讨论】:

  • 我搜索了 python3.10 文件夹,没有关联的 include 目录。
  • include 文件夹与从 Python.org 下载的任何 Python 一起分发。如果最坏的情况发生,我会重新下载压缩的可分发文件(如果您还没有这样做的话)。在将其他 python3.10 改回 python3.8 后执行 cp "$HOME/python3.10/include" -t "/usr/include/python3.10" 没有什么坏处。您还必须在 cp 调用后将复制的包含目录重命名为 python3.10,但只要标头与您使用的解释器版本匹配就可以了。我也建议将 python 可执行文件与你的路径隔离开来
  • 是的,确实有帮助。我还遇到了一些我设法解决的 pybind11 安装问题,所以现在一切正常。谢谢!
猜你喜欢
  • 2021-06-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-27
相关资源
最近更新 更多