0

我有以下提升:python 代码(gona.cpp)。

#include <iostream>

using namespace std;

void say_hello(const char* name) {
    cout << "Hello " <<  name << "!\n";
}

#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
using namespace boost::python;

BOOST_PYTHON_MODULE(hello)
{
    def("say_hello", say_hello);
}
int main(){
    return 0;
}

我的系统(Windows 7 32 位)中安装了 boost 1.47(boost pro)。我使用 Microsoft Visual Studio 2010 来构建它,它已经构建成功。但我想在 python 代码中使用它(作为导入)。我有以下代码(setup.py)将其构建到 python 模块中。

from distutils.core import setup
from distutils.extension import Extension

setup(name="PackageName",
    ext_modules=[
        Extension("hello", ["gona.cpp"],
        libraries = ["boost_python", "boost"])
    ])

“gona”是文件 C++ 文件名。我使用以下命令在命令行中构建它。

python setup.py build

执行此操作后,我收到以下错误。

>python setup.py build
running build
running build_ext
building 'hello' extension
C:\MinGW\bin\gcc.exe -mdll -O -Wall -IC:\Python27\include -IC:\Python27\PC -c De
cision_Tree.cpp -o build\temp.win32-2.7\Release\gona.o
gona.cpp:9:35: fatal error: boost/python/module.hpp: No such file or di
rectory
compilation terminated.
error: command 'gcc' failed with exit status 1

看来我系统中的 boost 安装仅适用于 Visual Studio(因为它已成功构建)。我在 Visual Studio 中运行了其他没有问题的 boost 程序。如何将其构建为 python 模块,以便可以在 python 代码中导入?(使用命令行或 Visual Studio)

4

1 回答 1

0

这里有几件事:

  • 你也可以直接使用VS2010构建Python模块,只需将输出路径设置为foo.pyd而不是foo.dll。
  • setup.py 似乎使用 MinGW,也许您可​​以说服它使用有效的 VS2010 设置来代替?
  • 您可以使用“-I”通知 GCC 有关包含路径的信息,请参阅 GCC 文档。我不确定如何告诉 setup.py 它应该在哪里查找包含路径,但您应该能够轻松找到该文档。
  • 看起来 setup.py 正在尝试编译为 C 代码(“gcc.exe”而不是“g++.exe”),这可能会导致进一步的问题。
  • 您的代码有一个 main() 函数,这在 DLL 中不需要(二进制 Python 模块实际上是 DLL)。
于 2013-05-16T19:46:01.730 回答