2011-07-01 129 views
2

我正在使用一个API,它是作为一个dll/so文件分发的,我需要动态链接到我的python程序。为了实现这一点,我想使用Cython。Cython:动态链接一个dll/so

我以前能够静态链接到dll。这个效果很好,除了API有四种不同的风格,理论上无限更多,用户应该能够用他们想要的任何名称(有点像插件系统)编译它们。因此,我不能只制作一个静态链接到一个库的so/pxd文件,或者甚至链接它们的选择。

我需要的是能够将so/dll名称传递到Cython代码并让它“导入”它。我知道这可以通过ctypes.cdll.LoadLibrary通过ctypes完成,但是在Cython中可能会出现这种情况吗?我将不得不使用ctypes来做到这一点?

回答

2

我假设你正在讨论在这里写C模块。如果是的话,你可以。我不知道Windows的等价物是什么,但是在Linux中你可以使用dlopen和朋友。有一个手册页和几个网站记录它。试试这个链接“http://linux.die.net/man/3/dlopen”它为您提供了一个接近页面底部的好例子。这和ctypes做的事情是一样的,实际上我认为这可能是ctypes使用的。