使用ctypes在python中使用C ++库

时间:2016-01-21 06:16:21

标签: python c++ ctypes

我有一个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调用的函数声明?

1 个答案:

答案 0 :(得分:0)

ctypes是一个集成现有库的工具,您无法对其进行更改。既然你有源并愿意改变它们,你也可以用C ++编写一个Python模块,其中有多个工具包,例如: Boost.Python的。换句话说,@ Deleisha是对的,ctypes是错误的工具。

请注意,您仍然可以通过包装函数和类从现有库创建Python模块。使用工具包而不是extern "C"包装器在那里仍然有意义。首先,它简化了包装类,其次,你不需要C ++中的extern "C"包装器和Python中的另一个ctypes包装器。