我想在python中使用共享库中的一些函数。从python doc,我知道ctypes是一个不错的选择。但是这样的库有一些未定义的符号,我应该将它链接到另一个共享库来获取符号。
在g ++中,它很简单:g ++ main.cpp -la -lb。我需要的函数是在liba.so中,而liba.so有一些未定义的函数,可以在libb.so中解决。
但是如何在ctypes中做到这一点? ctypes.cdll.LoadLibrary('liba.so')表示有一些未定义的符号,如何告诉ctypes找到libb.so?因为ldd liba.so没有显示到libb.so的链接。
示例:我想在gsl中使用一些函数。在g ++中:
g++ main.cpp -lgsl -lgslcblas
和ldd libgsl.so没有显示libgslcblas的链接
在python中:
ctypes.cdll.LoadLibrary('libgsl.so')
如何告诉ctypes找到libgslcblas?
如果我使用scalapack也会发生同样的问题。我使用的是ubuntu 16.04
答案 0 :(得分:1)
此old answer告诉我应用Object.subClass = function(properties) {
initializing = true;
var proto = new this();
initializing = false;
function Class() {
console.log(initializing)
}
Class.prototype = proto;
Class.constructor = Class;
Class.subClass = arguments.callee;
return Class;
};
var Constructor = Object.subClass()
var subConstructor = Constructor.subClass() // true
var instance = new subConstructor() // false
// if var initializing = true;
var proto = new this();
initializing = false;
var Constructor = Object.subClass()
var subConstructor = Constructor.subClass() // false
var instance = new subConstructor() // false
,即在这种情况下
mode=ctypes.RTLD_GLOBAL