【问题标题】:#include <Python.h> CMake project Visual Studio 2019 windows 10#include <Python.h> CMake 项目 Visual Studio 2019 windows 10
【发布时间】:2021-08-10 21:30:29
【问题描述】:

我在 Windows 中构建一个简单的 C++ 项目时遇到了一些问题。

我想做什么:

  1. 用 C++ 运行一些简单的代码
  2. 使用 matplotlibcpp 库打印图表。

我使用 vcpkg 安装了 matplotlibcpp 库。 我对 matplotlibcpp.h 标头(包括 Python.h)有疑问。

我收到此错误: 错误代码 1083 - 无法打开包含文件:“Python.h”:没有这样的文件或目录。

我的 PC 上安装了 anaconda,并且 Python 的路径已添加到 Windows 中的环境 PATH 中。

我的代码:

#include "matplotlibcpp.h"

using namespace std;
namespace plt = matplotlibcpp;

int main()
{
    cout << "Hello!" << endl;

    plt::plot({ 1,3,2,4 });
    plt::show();

    return 0;
}

我的 CMakeList.txt:

cmake_minimum_required (VERSION 3.8)

project ("MyProj" VERSION 1.0)

include_directories(include)


# Add source to this project's executable.
file(GLOB_RECURSE SOURCES "src/*.cpp")
add_executable (MyEx ${SOURCES} "main.cpp" "main.h")

find_path(MATPLOTLIB_CPP_INCLUDE_DIRS "matplotlibcpp.h"
            HINTS
            C:/Users/claudiop/dev/vcpkg/vcpkg/installed/x86-windows/include/matplotlibcpp.h)
   target_include_directories(MyEx PRIVATE ${MATPLOTLIB_CPP_INCLUDE_DIRS})

我试图遵循这篇文章中的指示 can't include Python.h in visual studio 但我没能解决问题。

有什么建议/帮助/提示吗?

【问题讨论】:

  • 使用target_include_directories 将包含matplotlibcpp.h 标头的目录添加到包含目录列表中。您需要对包含 Python.h 标头的目录执行相同的操作。 “Python 的路径已添加到 Windows 中的环境 PATH” - PATH 变量用于搜索可执行文件和库。它不影响搜索头文件。请注意,除了在编译可执行文件时添加包含目录之外,您还需要将可执行文件与适当的库链接。
  • 非常感谢您的回答。添加find_path(PYTHON_INCLUDE_DIRS "Python.h" HINTS C:/Users/claudiop/AppData/Local/Continuum/anaconda3/pkgs/python-3.7.4-h5263a28_0/include/Python.h) target_include_directories(MyEx PRIVATE ${PYTHON_INCLUDE_DIRS}) 我仍然得到同样的错误
  • 要求 Visual Studio 显示为构建项目而执行的确切命令行:stackoverflow.com/questions/6373841/…。检查,该命令行实际上包含带有目录的包含选项,该目录又包含Python.h 标头。
  • 这是来自输出窗口的错误,详细选项打开:1>----- 构建开始:项目:ZERO_CHECK,配置:调试|x64 ------ 2>- ----- 构建开始:项目:AUF,配置:Debug|x64 ------ 2> main.cpp 2>C:\Users\claudiop\dev\vcpkg\vcpkg\packages\matplotlib-cpp_x86-windows \include\matplotlibcpp.h(5,10):致命错误 C1083:无法打开包含文件:'Python.h':没有这样的文件或目录 ========== 构建:1 成功,1 失败, 0 个最新,0 个已跳过 ==========
  • 嗯,这不是用于编译main.cpp的命令行。可能,它应该是显示此命令行的其他选项。但我不知道如何在 Visual Studio 中制作它。

标签: python c++ windows matplotlib cmake


【解决方案1】:

Python.h 是负责将 Python 代码嵌入 CPP 的库的头文件。您可能没有安装库本身,因此出现错误。您可能可以使用vcpkg 这样做。如果你确实有它并且仍然遇到这个问题,那么下面的文字应该让你了解事情是如何运作的。很遗憾,我只能为您做这些,因为我对 Windows 没有太多经验。

Python.h 是共享库的头文件。您需要指定与此库相关的.so 对象的路径(我相信这种格式在Windows 上称为.dll)对象。以下是在 Linux 上的操作方法:

set(PYTHON_HEADERS /usr/include/python3.9 ) # path to header
set(PYTHON_STATIC  /usr/lib64             ) # path to where windows stores dlls

add_library(python_embeded SHARED IMPORTED GLOBAL)
set_target_properties(python_embeded PROPERTIES
    IMPORTED_LOCATION ${PYTHON_STATIC}/libpython3.9.so
    INTERFACE_INCLUDE_DIRECTORIES ${PYTHON_HEADERS}
    LINKER_LANGUAGE C
    )
    
        add_executable(program main.cpp)
 set_target_properties(program PROPERTIES
    LINKER_LANGUAGE CXX
    )
    
target_link_libraries(program PRIVATE python_embeded)

我不知道它是如何在 Windows 上完成的,所以我将介绍它在 Linux 上的工作原理。 Linux 将您包含在&lt;&gt; 中的所有头文件放入特殊目录/usr/include。在 Windows 上,您可能必须指定要包含的标头在哪里,或者直接将其放入项目目录中。您需要对 .dll 文件执行相同操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-11
    • 2020-09-12
    • 1970-01-01
    • 2020-12-03
    • 2021-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多