我为Python编写了一个C extesion,模块成功地编译在一个.so文件中。但是,当我尝试在Python端使用wrapped C函数(Python中调用包装的C函数的测试代码)时,我得到了以下ImportError
ImportError: /home/username/newModule.cpython-36m-x86_64-linux-gnu.so: undefined symbol: dgetri_
{cd4{I>在cd4{3>库中查找到的链接{cd3>是错误的。所以我的问题是:
当包装好的c函数依赖LAPACK库生成.so
格式的模块时,如何为python编译c扩展代码?
{I}当前正在编译python模块。我想我需要从命令行编译C代码以链接LAPACK
,但不确切地知道哪些命令是合适的?在
感谢任何帮助。在
另外,我在linux中编译时使用了以下两行代码
我发现下面的链接很有用, https://docs.python.org/2/extending/building.html
您可能对使用scipy.linalg.cython_lapack感兴趣。 它提供对LAPACK函数^{} 的访问。而the good news是:
使用
dger
的示例在Calling BLAS / LAPACK directly using the SciPy interface and Cython上提供。另请参见Improving Cython Lapack performance with internal array definitions? 在我对MPI python-Open-MPI的回答中,我详细介绍了如何使用cythonãblas,因此下面是如何将其改编为dgetri的方法:代码的关键部分写在^{} ,在一个专用文件
myinverse.pyx
中。这个文件被Cython转换成
myinverse.c
文件这个c文件是由您最喜欢的c编译器
gcc
编译来构建一个共享库myinverse.so
优化后的函数可以在程序中使用
import myinverse
。下面是一个cython模块,它将放在.pyx文件中:
要对.pyx文件进行cythonize和编译,可以使用以下makefile(我希望您使用的是Linux…)
^{pr2}$新的python myinverse函数chainng LAPACK的},在python主文件中调用:
^{3}$dgetrf()
和{相关问题 更多 >
编程相关推荐