我有一个C ++库,提供各种用于管理数据的类。我有库的源代码。 我试图使用ctypes从python调用此库的lda.cpp函数。该函数依次使用库中所有其他.cpp文件的函数。
$scope.myLast = $scope.myObj['id' + Object.keys($scope.myObj).reduce(function(a, key){
if ($scope.myObj[key]) {
var idNum = Number(key.replace('id', ''));
a = Math.max(a, idNum)
}
return a;
}, -Infinity)];
我发现我需要使用C ++包装器将函数声明为extern,然后将它们编译为.so文件。我的问题是我应该如何制作这个包装文件?我应该将库中的所有函数声明为extern还是仅将我想从python调用的函数声明?
答案 0 :(得分:0)
ctypes
是一个集成现有库的工具,您无法对其进行更改。既然你有源并愿意改变它们,你也可以用C ++编写一个Python模块,其中有多个工具包,例如: Boost.Python的。换句话说,@ Deleisha是对的,ctypes
是错误的工具。
请注意,您仍然可以通过包装函数和类从现有库创建Python模块。使用工具包而不是extern "C"
包装器在那里仍然有意义。首先,它简化了包装类,其次,你不需要C ++中的extern "C"
包装器和Python中的另一个ctypes
包装器。