【发布时间】:2019-07-27 11:50:39
【问题描述】:
我是编程新手,我用元组方法在c++中定义了一个函数,用于两个返回的变量,编译文件后,在python文件中,我尝试访问已编译的动态库中的两个返回变量,但它不起作用,当我尝试运行 python 程序时发生分段错误。但我实际上用 c++ 的单个返回变量成功了,我认为使用 python 的元组方法访问两个返回的变量可能有特殊的技巧。
以下是带有元组方法的两个返回变量的c++代码
std::tuple<double, double> Cassie2d::Step(ControllerTorque* action)
{
dyn_model_.setState(mj_data_->qpos, mj_data_->qvel);
dyn_state_.UpdateDynamicState(&dyn_model_);
mju_copy(mj_data_->ctrl, action->torques, nU);
mj_step(mj_model_, mj_data_);
return std::make_tuple(mj_data_->qacc,mj_data_->time);
Render();
}
以下是我应用的python方法,由于返回的变量都是double类型。
lib.StepTorque.argtypes = [ctypes.c_void_p, ctypes.POINTER(ControllerTorque)]
lib.StepTorque.restype = ctypes.c_double
我猜restype 不只是等于ctypes.c_double,因为它适用于一个返回的变量,它可能不适用于两个返回的变量。
非常感谢您的帮助!
【问题讨论】:
-
提供一些细节 - 你使用什么 python 库?分段错误表明您可以初始化 python,但不能初始化一些附加模块(也许是 numpy?)。多次返回通常可以像这样访问:
VarA, VarB = function_name(arguments) -
lib = cdll.LoadLibrary('../../bin/libcassie2d.so')。 c++文件编译成动态库libcassie2d.so,上面的代码是在python中加载库,我可以加载一个返回变量,而不是我在c++中定义的两个变量
标签: python c++ segmentation-fault stdtuple ctype