当前位置: 首页 > 面试题库 >

需要有关Boost.Python入门的帮助

易元青
2023-03-14
问题内容

我正在尝试构建我的第一个Boost.Python示例。

#include <iostream>
#include <boost/python.hpp>

using namespace boost::python;


class Hello {

public:
    std::string greet() {
        std::cout << "Hello World" << std::endl;
    }
};


BOOST_PYTHON_MODULE(hello)
{
    class_<Hello>("Hello")
        .def("greet", &Hello::greet);
}

int main() {
    std::cout << "Boost.Python Test" << std::endl;
    Hello hello;
    hello.greet();
    return 0;
}

编辑:正如@cdhowie所指出的,Python开发标头丢失了。我已经找到并包含了必需的头文件。现在链接器在抱怨:

   10:43:58 **** Build of configuration BoostPythonTest-DPar for project BoostPythonTest 

****
make all 
Building file: ../src/BoostPythonTest.cpp
Invoking: GCC C++ Compiler
/usr/local/bin/g++-4.7 -I/usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/include/python3.3m -I/usr/include -I/usr/local/Cellar/gcc/4.7.2/gcc/include/c++/4.7.2 -O0 -g3 -p -pg -Wall -c -fmessage-length=0 -std=c++11 -MMD -MP -MF"src/BoostPythonTest.d" -MT"src/BoostPythonTest.d" -o "src/BoostPythonTest.o" "../src/BoostPythonTest.cpp"
Finished building: ../src/BoostPythonTest.cpp

Building target: libBoostPythonTest-DPar.dylib
Invoking: MacOS X C++ Linker
/usr/local/bin/g++-4.7 -L/usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/lib/python3.3/config-3.3m -L/usr/local/Cellar/python3/3.3.0/Frameworks/Python.framework/Versions/3.3/lib -L/usr/local/Cellar/boost/1.51.0/lib -std=c++11 -Xlinker -ldl -framework CoreFoundation -lpython3.3m -dynamiclib -o "libBoostPythonTest-DPar.dylib"  ./src/BoostPythonTest.o   -lpython3.3m -lboost_python-mt -lpython3.3
Undefined symbols for architecture x86_64:
  "boost::python::detail::init_module(PyModuleDef&, void (*)())", referenced from:
      _PyInit_hello in BoostPythonTest.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make: *** [libBoostPythonTest-DPar.dylib] Error 1

我已经链接到-lpython3.3m -lboost_python-mt -lpython3.3-还有什么丢失的?

编辑:我想我已经链接到python3.3-config列出的所有内容。由于缺少符号,链接仍然不起作用。


问题答案:

发生此特定链接器错误时,通常是由于应用程序是针对一个版本的Python(例如Python 3.x头文件boost_python)构建的,而库是针对另一个版本(如2.x)构建的结果。

在中boost/python/module_init.hpp,init_module针对Python 3.x构建时,该函数具有以下签名:

PyObject* boost::python::detail::init_module(PyModuleDef&, void(*)());

和针对Python 2.x构建时的以下签名:

PyObject* boost::python::detail::init_module(char const* name, void(*)());

由于可以在可以看到的实施,不仅功能之一将出现在Boost.Python库,。因此,假设已经链接了Boost.Python库,并且链接器仅抱怨无法解析3.xinit_module函数,那么很有可能是针对Python 2.x构建了Boost.Python库。版本,而应用程序代码是针对Python 3.x头文件构建的。您可以通过转储Boost.Python库的符号并检查init_module签名来验证这一点。

要解决此问题,请使用与构建Boost.Python相同的Python版本构建应用程序。在这种情况下,请执行以下任一操作:

  • 使用Python 2.x头文件构建应用程序,并针对Python 2.x库进行链接。
  • 针对Python 3.x构建Boost.Python。 本文档介绍的步骤来构建加速,并且该文件进入详细的Boost.Python的。可能有必要bootstrap通过使用–with-python参数来明确提供Python可执行文件,在此过程中,Boost.Python将基于该可执行文件进行构建。


 类似资料:
  • 这是主平衡分区 我正尝试通过以这种方式添加这两个分区来更新

  • 问题内容: 好吧,我可能也已在较早之前发布了此内容,但到目前为止仍找不到答案,因此请帮助我解决这个问题。 我的数据库结构: ATT (表) Act_ID(PK) Assigned_To_ID(FK,请参阅) Project_ID(FK,请参阅) Product_ID(FK,请参阅) 状态(可以是) 产品表 产品编号(PK) 产品名称 项目表 Project_ID(PK) 项目名 员工表 Emp_I

  • 我在代码中遇到了一些设计问题。我目前正在为一个游戏编写原型Java但是我对我所做的选择不满意。目前我的游戏有几个类:圆形、圆形集和组件(基本上是主类)。这些类之间的关系如下: 1圆形集可以有多个圆形,每个圆形集都需要知道它在哪个圆形集中。 有人能帮我举一些收藏的例子吗?什么最适合我? 提前感谢!

  • 在一个HTML文件中, 包含许多 ,而在另一个 中, 包含许多 。使用我需要的JavaScript,当我悬停在第一个上时,第一个 的背景颜色会发生变化,以此类推... 匿名用户 你的问题是如此令人困惑,提供一个屏幕截图或绘图表明你实际想要什么。

  • 问题内容: 您如何在一个日期稀疏的表与另一个日期详尽的表之间进行联接,以使稀疏日期之间的间隔取前一个稀疏日期的值? 说明性示例: 所需结果: 更新: 几个人提出了可以完成所需结果的相关子查询。(相关子查询=包含对外部查询的引用的子查询。) 这将起作用;但是,我应该注意到,我使用的平台是MySQL,其相关子查询的优化效果很差。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

  • 我想对我的文件内容进行排序。我的文件内容是学生姓名,他们的学生编号,他们的班级,他们的成绩。这些数据由“;”分隔。首先,我需要计算平均值和字母等级。我已经计算过了,但是我需要将所有内容写入另一个文件,顺序必须是最高等级到最低等级。我该怎么办?