为 Python 创建 C++ 扩展

Posted

技术标签:

【中文标题】为 Python 创建 C++ 扩展【英文标题】:Creating a C++ extension for Python 【发布时间】:2017-09-19 00:24:00 【问题描述】:

当我按照Creating a C++ extension for Python 的说明进行操作时,直到我到达将 C++ 项目转换为 Python 的扩展部分之前都没有收到任何错误。

在我完成本节中的步骤并尝试构建解决方案后,我偶然发现:

1>------ Build started: Project: CppMain, Configuration: Debug Win32 ------
1>module.cpp
1>   Creating library C:\Users\$andu\Desktop\Cpp4Py\Debug\Cpp4Py.lib and object C:\Users\$andu\Desktop\Cpp4Py\Debug\Cpp4Py.exp
1>module.obj : error LNK2019: unresolved external symbol __imp__PyFloat_FromDouble referenced in function "struct _object * __cdecl tanh(struct _object *,struct _object *)" (?tanh@@YAPAU_object@@PAU1@0@Z)
1>module.obj : error LNK2019: unresolved external symbol __imp__PyFloat_AsDouble referenced in function "struct _object * __cdecl tanh(struct _object *,struct _object *)" (?tanh@@YAPAU_object@@PAU1@0@Z)
1>module.obj : error LNK2019: unresolved external symbol __imp__PyModule_Create2 referenced in function _PyInit_Cpp4Py
1>C:\Python\Anaconda3\libs\python3.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'x86'
1>C:\Users\$andu\Desktop\Cpp4Py\Debug\Cpp4Py.pyd : fatal error LNK1120: 3 unresolved externals
1>Done building project "CppMain.vcxproj" -- FAILED.
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

根据上面的消息,我怀疑问题出在该指令集的第 2 步。但我真的不知道如何处理。有什么建议吗?


我使用 x64 Windows 10。

【问题讨论】:

【参考方案1】:

我不确定。但是您可以将项目的目标机器类型更改为 x64 并重试。看到这个警告:

C:\Python\Anaconda3\libs\python3.lib:警告 LNK4272:库机器类型“x64”与目标机器类型“x86”冲突

【讨论】:

我应该提到我已经做到了。不成功。您是否尝试过说明?它们对你有用吗? 其实,你是怎么做到的?我的做法是从解决方案属性中选择 x64 平台。 好的,我还在菜单栏中将解决方案平台更改为 x64,并且可以正常工作。我现在的问题是pip install . 不起作用。我不确定我是否按照我应该做的那样创建了setup.py。没有 Python 规定“搜索“Python”并选择 Python 文件”,所以我只是在该目录中创建了一个文件并将其添加到项目中。

以上是关于为 Python 创建 C++ 扩展的主要内容,如果未能解决你的问题,请参考以下文章

无法从使用 SWIG 创建的 python 访问 C++ 扩展模块及其方法

如何用C++ 写Python模块扩展

如何使用纯 Python 扩展 API (python3) 包装 C++ 对象?

Python 的 C++ 扩展模块返回一个 Numpy 数组

Python 非平凡的 C++ 扩展

如何在 boost::python 扩展模块中正确组合 C++ 和 Python 代码?