Cython:动态链接dll/so
我正在使用一个API,它以dll或so文件的形式分发,我需要将这个文件动态链接到我的Python程序中。为此,我想使用Cython。
过去,我能够静态链接这个dll。这种方法效果不错,但这个API有四种不同的版本,理论上还会有更多版本出现,用户应该能够用他们想要的名字来编译这些版本(有点像插件系统)。所以,我不能只创建一个静态链接到某个特定库的so或pxd文件,甚至不能只链接到几个选择的库。
我需要的是能够将so或dll的名字传递给Cython代码,并让它“导入”这个库。我知道可以通过ctypes使用ctypes.cdll.LoadLibrary来实现这个功能,但在Cython中能做到吗?我是否必须使用ctypes来完成这个?
1 个回答
2
我猜你是在说写C语言模块。如果是这样的话,没问题,你可以这么做。我不太清楚在Windows上怎么做,但在Linux系统中,你可以使用dlopen和其他相关的函数。这个函数有详细的手册说明,还有很多网站提供相关的文档。你可以试试这个链接 "http://linux.die.net/man/3/dlopen",页面底部有个不错的例子。这个操作和ctypes做的事情是一样的,实际上我觉得ctypes可能就是用的这个方法。