我应该包括啥来制作 boost.python 扩展?
Posted
技术标签:
【中文标题】我应该包括啥来制作 boost.python 扩展?【英文标题】:What am I supposed to include to make a boost.python extension?我应该包括什么来制作 boost.python 扩展? 【发布时间】:2020-10-19 00:13:02 【问题描述】:编辑:不小心复制粘贴了两次。
我正在使用 boost 和普通 C API 的组合制作 C++ Python 扩展,但我无法编译它。我已阅读以下文档:
documentation from boost.org
documentation from python wiki
Python bindings for C++ medium
这是来自 cpp 文件的代码:
#include#include #include #include #include 使用命名空间标准; 类测试类 测试类(字符串味精) cout ("TestClass", init<:string>());
生成文件:
test: test.cpp
g++ -Wall -shared -std=c++11 -fPIC -I/usr/include -o test`python3-config --extension-suffix` test.cpp
错误输出:
test.cpp:17:5: error: ‘class_’ was not declared in this scope
class_<TestClass>("TestClass", init<std::string>());
^
test.cpp:17:5: note: suggested alternative:
In file included from /usr/include/boost/python/object_core.hpp:20:0,
from /usr/include/boost/python/args.hpp:25,
from /usr/include/boost/python.hpp:11,
from test.cpp:1:
/usr/include/boost/python/def_visitor.hpp:14:56: note: ‘boost::python::class_’
template <class T, class X1, class X2, class X3> class class_;
^
test.cpp:17:21: error: expected primary-expression before ‘>’ token
class_<TestClass>("TestClass", init<std::string>());
^
test.cpp:17:36: error: ‘init’ was not declared in this scope
class_<TestClass>("TestClass", init<std::string>());
^
test.cpp:17:36: note: suggested alternative:
In file included from /usr/include/boost/python/class.hpp:20:0,
from /usr/include/boost/python.hpp:18,
from test.cpp:1:
/usr/include/boost/python/init.hpp:58:7: note: ‘boost::python::init’
class init; // forward declaration
^
test.cpp:17:52: error: expected primary-expression before ‘>’ token
class_<TestClass>("TestClass", init<std::string>());
^
test.cpp:17:54: error: expected primary-expression before ‘)’ token
class_<TestClass>("TestClass", init<std::string>());
^
make: *** [test] Error 1
我想我已经包含了所有的头文件,但我不确定为什么它说它没有在这个范围内声明。任何帮助将不胜感激
【问题讨论】:
【参考方案1】:就像(几乎?)Boost 中的所有内容(不是宏)一样,class_
位于命名空间中,在本例中为 boost::python
。要么:
-
在文件顶部添加
using namespace boost::python;
(就在包含之后)。
请参阅boost::python::class_
。
这同样适用于其他符号。
这是shown in the quickstart part of the documentation。对于其余的大部分内容,它们只显示短代码 sn-ps,所以我认为它是隐含的。
【讨论】:
以上是关于我应该包括啥来制作 boost.python 扩展?的主要内容,如果未能解决你的问题,请参考以下文章