【问题标题】:Attempting to Interface Python 3 with C++ using Boost尝试使用 Boost 将 Python 3 与 C++ 接口
【发布时间】:2012-02-27 22:03:52
【问题描述】:

我一直在尝试在 Windows 7 中使用 Boost 使用 C++ 扩展 Python。这是我目前拥有的代码:

C++ 代码,hellomodule.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);
}

Python 代码,setup.py:

#!/usr/bin/env python

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

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

我尝试通过打开命令提示符并在我的 Python32 目录中运行“python setup.py build”来构建它。我在环境变量中包含了 vcvarsall.bat 的路径。

我现在遇到的错误:

.

我对 C++ 的经验很少,而且我是 Boost 的新手。任何帮助将不胜感激。

编辑:这是在 MVSC++ 2010 中完成的,但是我使用的是 v9.0 工具集,并且还在 MVSC++ 2008 Express 中进行了尝试。 hellomodule.cpp 的路径是“C:\Users\Amir\Documents\Visual Studio 2010\Projects\BoostExample\BoostExample\hellomodule.cpp”

【问题讨论】:

  • "hellomodule.cpp': 没有这样的文件或目录。这意味着你的路径错误

标签: c++ python boost


【解决方案1】:

编译器找不到 hellomodule.cpp,因为它(可能)不在 c:\python32 中。尝试将 hellomodule.cpp 移动到 c:\python32 - 或者,更好的是,将目录更改为 hellomodule.cpp 的路径 - 并重建。它可能会导致其他一些编译器错误,但至少你会解决第一个问题。

祝你好运。

【讨论】:

  • 感谢您的回复;我尝试从 C++ 源代码所在的目录运行,它纠正了这个错误,但正如您预测的那样,它会导致其他编译器错误。 Here's 新输出。我肯定有 boost/python/module.hpp,这只是让编译器找到它的问题。有任何想法吗?顺便说一下,+1 为您提供帮助。 :)
  • @Tagc 当然,现在您需要将 Boost 路径添加到编译器的包含列表中。有几种方法可以做到这一点,但现在只需在命令提示符下键入以下内容:set INCLUDE=%INCLUDE%;&lt;path-to-boost-here&gt;。因此,如果 boost 在 c:\boost 中,您将输入 set INCLUDE=%INCLUDE%;c:\boost。然后是新的错误。 ;) [编辑:请注意,我假设您仍在命令提示符下构建,并且您在运行 vcvarsall.bat 后进行此更改]
  • 再次感谢。 :) 我以为我已经在 MVSC++ 2010 和 MVSC++ 2008 Express 中设置了包含路径和库路径,但是按照你说的做似乎确实有助于我取得进展。现在它似乎能够找到包含文件,但它抱怨无法访问库文件,但我猜这将以与您刚才描述的类似的方式解决。i.imgur.com/rJAAo.png
  • @Tagc 是的,相同的过程,但使用与 INCLUDE 相同的过程将 boost 的 lib 路径(例如,c:\boost\stage\lib)附加到 LIBLIBPATH 的末尾.我对这一步不太确定,因为我不必配置命令行构建,但链接器知道缺少哪个库 (boost_python.lib)。只需让它搜索它所在的文件夹即可。
  • 谢谢,但我刚刚和 cython 合作过,这真是太棒了。我认为我不再需要使用 Boost。我将宣布您的回答接受所有帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多