matlab ichol,使用Ctypes在Python中加载编译的Matlab共享库

我试图在Python中进行不完全的Cholesky分解,但找不到直接的Python包。在

因为我能在网上找到的大多数可用代码都是用Matlab编写的,所以我想绕道过去将matlab代码编译到一个共享库(我使用macos和matlab_2014a,因此它应该生成.dylib文件)

使用Ctypes在Python中加载库

下面列出了详细的步骤:

0。下载Matlab源代码

代码可以从F.Bach的网页link to zip file下载,该网页包含以下文件:panc:csi-1.0 panc25$ ls

center.m csi.dll csi.mexglx csi_gaussian.dll csi_gaussian.mexglx readme.txt

csi.c csi.m csi_gaussian.c csi_gaussian.m demo_csi.m sqdist.m

1。将matlab代码编译成共享库

然后按照this post运行命令:

^{pr2}$

大约一分钟后,终端打印MEX completed successfully,在我的文件夹中有panc:csi-1.0 panc25$ ls

center.m csi.m csi_gaussian.dll demo_csi.m libcsi.exports readme.txt

csi.c csi.mexglx csi_gaussian.m libcsi.cpp libcsi.h sqdist.m

csi.dll csi_gaussian.c csi_gaussian.mexglx libcsi.dylib mccExcludedFiles.log

其中libcsi.dylib是我想要的共享库。在

2。在Python中加载库

然后我打开IPython并尝试加载库:In [1]: import ctypes

In [2]: ctypes.C

ctypes.CDLL ctypes.CFUNCTYPE

In [2]: ctypes.CDLL('libcsi.dylib')

---------------------------------------------------------------------------

OSError Traceback (most recent call last)

in ()

----> 1 ctypes.CDLL('libcsi.dylib')

/Users/panc25/anaconda/lib/python2.7/ctypes/__init__.pyc in __init__(self, name, mode, handle, use_errno, use_last_error)

363

364 if handle is None:

--> 365 self._handle = _dlopen(self._name, mode)

366 else:

367 self._handle = handle

OSError: dlopen(libcsi.dylib, 6): Library not loaded: @rpath/libmwmclmcrrt.8.3.dylib

Referenced from: /Users/panc25/Downloads/csi-1.0/libcsi.dylib

Reason: image not found

即使我用完整路径替换ctypes.CDLL('libcsi.dylib')中的文件名,这个问题仍然存在。在

所以我很困惑。共享库在那里,但是为什么Python说“找不到图像”?

顺便说一句

由于源代码也通过mex.h提供C实现,所以我还尝试先创建一个.mex文件,然后将{}编译到共享库中,如下所示:panc:csi-1.0 panc25$ mex csi.c

它创建了csi.mexmaci64文件。然后根据this link,我打电话给:panc:csi-1.0 panc25$ mcc -B csharedlib:csi2 csi.mexmaci64

生成了csi2.dylib文件。在

但是当我试图用Python加载它时,我遇到了同样的错误。在

有谁能告诉我出什么事了吗?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值