使用VisualStudio2008构建boost python示例 我使用Boost Python库来创建我的C++代码的Python扩展。我想能够从Python调用“GeleT”函数,从下面的C++代码: #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); }

使用VisualStudio2008构建boost python示例 我使用Boost Python库来创建我的C++代码的Python扩展。我想能够从Python调用“GeleT”函数,从下面的C++代码: #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); },c++,python,boost-python,C++,Python,Boost Python,我已经设法使用bjam实现了这一点(生成了hello_ext.pyd,效果很好),但现在我想使用VisualStudio2008构建它。生成一个hello.dll(但既不是hello_ext.dll,也不是any.pyd)。调用python代码后,我得到一个错误: 导入错误:没有名为hello\u ext的模块 将hello.dll重命名为hello.pyd或hello_ext.pyd后,我得到另一个ImportError:dll加载失败 如何使用VS 2008构建正确的.pyd文件?请确保您有

我已经设法使用bjam实现了这一点(生成了hello_ext.pyd,效果很好),但现在我想使用VisualStudio2008构建它。生成一个hello.dll(但既不是hello_ext.dll,也不是any.pyd)。调用python代码后,我得到一个错误:

导入错误:没有名为hello\u ext的模块

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


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

请确保您有flag
-lpython26
(如果您使用的是python2.6),并且在您的情况下,文件名应该是
hello\u ext.pyd

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

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

$(OutDir)\$(ProjectName).pyd
(我还创建了一个构建后操作来从python运行单元测试)

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

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

错误导入错误:Dll加载失败通常意味着.pyd模块依赖于找不到的其他Dll—通常是msvc*.Dll。您可能希望尝试在记事本中打开.pyd文件并搜索“.dll”。然后检查目录或路径中是否存在所有DLL依赖项


或者使用它来查找缺少的依赖项,尽管这是几年前提出的问题(仍然不容易找到解决方案),但我今天遇到了同样的问题,经过几个小时的搜索,我终于找到了可行的解决方案

  • 原因很简单,正如@AndiDog所注意到的,您构建的.pyd文件依赖于其他一些.dll
  • 在我的例子中,它是[C++boost folder]/stage/lib文件夹下的boost_python-vc120-mt-1_58.dll/
  • 所以,我要做的是复制这个文件,并将它粘贴到.pyd文件文件夹下,然后我的python可以正确地导入我构建的项目

  • 也许还有其他一些解决方案,那就是不依赖于动态库来构建项目,而是使用静态库。一些源代码说要在VS预处理器中定义BOOST_PYTHON_STATIC_LIB,那么您的项目将不依赖于动态库(我是一个新的C++er),但请确保您已经在BOOST中构建了libboost_PYTHON-vcXXX-mt-1_58.dll

  • 要定义预处理器,路径是:C/C++->预处理器->预处理器定义->编辑BOOST\u PYTHON\u STATIC\u LIB

对于那些有兴趣使用makefile(和gcc)构建这样一个项目的人,请参见
#define BOOST_PYTHON_STATIC_LIB