使用转换器提升 Python 问题 - 静态链接
Boost Python issue with converters - static linking
我对下面的代码有一个问题。
这是一个如何通过shared_ptr将自定义类传递给嵌入式python代码的示例,当boost动态链接时,它可以工作。
不幸的是,具有静态链接 boost 的相同代码不适用于以下错误消息:
"找不到C++类型的to_python(按值(转换器:类提升::shared_ptr"。
我不明白为什么不同的链接会影响注册转换器的类型识别。我错过了什么?
有人可以帮助我吗?
谢谢
多米尼克
这里的例子。
#include <boost/shared_ptr.hpp>
#include <boost/make_shared.hpp>
#include <boost/python.hpp>
#include <string>
#include <iostream>
namespace bp = boost::python;
struct Foo{
Foo(){}
Foo(std::string const& s) : m_string(s){}
void doSomething() {
std::cout << "Foo:" << m_string << std::endl;
}
std::string m_string;
};
typedef boost::shared_ptr<Foo> foo_ptr;
BOOST_PYTHON_MODULE(hello)
{
bp::class_<Foo, foo_ptr>("Foo")
.def("doSomething", &Foo::doSomething)
;
};
int main(int argc, char **argv)
{
Py_Initialize();
try {
PyRun_SimpleString(
"a_foo = Nonen"
"n"
"def setup(a_foo_from_cxx):n"
" print 'setup called with', a_foo_from_cxxn"
" global a_foon"
" a_foo = a_foo_from_cxxn"
"n"
"def run():n"
" a_foo.doSomething()n"
"n"
"print 'main module loaded'n"
);
foo_ptr a_cxx_foo = boost::make_shared<Foo>("c++");
inithello();
bp::object main = bp::object(bp::handle<>(bp::borrowed(
PyImport_AddModule("__main__")
)));
// pass the reference to a_cxx_foo into python:
bp::object setup_func = main.attr("setup");
setup_func(a_cxx_foo);
// now run the python 'main' function
bp::object run_func = main.attr("run");
run_func();
}
catch (bp::error_already_set) {
PyErr_Print();
}
Py_Finalize();
return 0;
}
据我了解有关 Boost Python 链接的文档,似乎用于将 Python 对象自动转换为C++对象的转换注册表在静态链接时不可用。我面临着同样的问题,很遗憾实际上是这样。我本来会想象至少需要捆绑所需的转换器,但由于某种原因恐怕并非如此。
相关文章:
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 基于boost的程序的静态链接——zlib问题
- 使用静态成员声明类时遇到问题
- 使用转换器提升 Python 问题 - 静态链接
- 关于读取有效 c++ 第 4 项(将非局部静态变量替换为局部静态变量)的问题
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- public:静态常量字符串声明/初始化问题
- 初始化与类类型相同的静态成员(静态初始化顺序问题)
- 将非静态函数绑定到回调时出现问题
- 在 C++ 中使用静态映射的奇怪问题
- 在 x86 32 位上的静态类实例中解决此问题
- 共享库中 __attribute__((构造函数)) 的全局/静态变量初始化问题
- MSYS2静态QT未定义的参考问题
- 这是静态库依赖树中的菱形问题吗?
- 静态 QT 编译问题
- 使用许多静态成员有问题
- 静态联系Intel TBB的问题
- VS 2017 C 静态LIB与 /MD项目依赖性问题编辑
- 创建静态数据成员的代码有什么问题
- dll导出/init问题(静态vars-init?)Visual Studio C++