构建boost时出错:python代码

时间:2013-05-16 16:37:38

标签: c++ python visual-studio-2010 boost boost-python

我有以下提升: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;
}

我在系统中安装了1.47(boost pro)(Windows 7 32位)。 我使用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)

1 个答案:

答案 0 :(得分: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)。