使用Visual Studio 2008构建boost python示例

jf.*_*jf. 11 c++ python boost-python

我正在使用Boost Python库来创建我的C++代码的python扩展.我希望能够从python中调用下面显示的C++代码中的'greet'函数:

#include <boost/python/module.hpp>
#include <boost/python/def.hpp>

char const* greet()
{
   return "hello, world";
}

BOOST_PYTHON_MODULE(hello_ext)
{
    using namespace boost::python;
    def("greet", greet);
}
Run Code Online (Sandbox Code Playgroud)

和python代码:

import hello_ext
print hello_ext.greet() 
Run Code Online (Sandbox Code Playgroud)

我已经设法使用bjam(hello_ext.pyd生成并且它工作得很好),但现在我想使用Visual Studio 2008构建它.一个hello.dll被构建(但是hello_ext.dll也没有.pyd).在调用我的python代码后,我收到一个错误:

ImportError:没有名为hello_ext的模块.

将hello.dll重命名为hello.pyd或hello_ext.pyd后,我得到另一个ImportError:Dll加载失败

如何使用VS 2008构建正确的.pyd文件?

Rya*_*rom 10

首先,确保您只尝试从Python导入发布版本; 导入调试版本将失败,因为运行时库版本不匹配.我还更改了我的项目属性,以便发布版本输出.pyd文件:

属性>>链接器>>输出:

$(OutDir)\$(ProjectName).pyd
Run Code Online (Sandbox Code Playgroud)

(我还创建了一个后期构建操作来从python运行单元测试)

接下来,确保在stdafx.h文件中定义以下内容:

#define BOOST_PYTHON_STATIC_LIB
Run Code Online (Sandbox Code Playgroud)

最后,如果您安装了多个python版本,请确保导入正确版本的python.h(在工具>>选项>>项目和解决方案>> VC++目录>>包含文件中).


And*_*Dog 5

错误ImportError:Dll加载失败通常意味着您的.pyd模块依赖于无法找到的其他DLL - 通常是msvc*.dll.您可能想尝试在记事本中打开.pyd文件并搜索".dll".然后检查目录或PATH中是否存在所有DLL依赖项.

或者使用Dependency Walker,它会为您找到缺少的依赖项


YOU*_*YOU 0

请确保您有标志-lpython26(如果您使用的是 python2.6)并且文件名应符合hello_ext.pyd您的情况。