所以我试图用Cython包装一些C代码。 我阅读了阅读应用Cython的教程来做这个( 1,2 ),但这些教程没有说明如何编译代码一旦你用Cython包装它,所以我有一个错误说它找不到我的C码。
首先,我的cython脚本(“calcRMSD.pyx”):
import numpy as np cimport numpy as np cdef extern from "rsmd.h": double rmsd(int n, double* x, double* y) #rest of the code ommited
我试图包装的C代码(“rmsd.h”):
#include #include #include #include extern "C" { // svd from lapack void dgesvd_(char*,char*,int*,int*,double*,int*,double*,double*,int*,double*, int*,double*,int*,int*); } double rmsd(int n, double* x, double* y) { //code omitted }
Setup.py
from distutils.core import setup from distutils.extension import Extension from Cython.Distutils import build_ext from Cython.Build import cythonize import numpy as np setup( ext_modules = cythonize([Extension("calcRMSD", sources = ["calcRMSD.pyx"], include_dirs = [np.get_include()], libraries = ["dgesvd"] #extra_compile_args = ["-I."], #extra_link_args = ["-L./usr/lib/liblapack.dylib"] )]) )
我的错误:
calcRMSD.c:269:10: fatal error: 'rsmd.h' file not found #include "rsmd.h"
我读了这个堆栈溢出线程使用Cython将Python链接到共享库
但是跟随它会给我带来不同的错误。 如果我尝试将rmsd.h放在源代码中,它表示它不识别文件类型。
如何将自定义C(它本身需要特殊的链接选项进行编译)与Cython链接?
这看起来有点有希望,但我不知道如何使用它。
请帮忙!
首先,它必须找到包含文件rsmd.h
您需要将可以找到此标头的路径添加到include_dirs
参数中。 有关丢失文件的错误应该消失。
然后,您还需要包含从编译C代码中获得的库。 如果是librsmd.a
,则将'rsmd'
添加到libraries
参数中。 此外,您可能需要library_dirs
参数,该参数包含可以找到该库的路径。
以上就是c/c++开发分享用C头文件编译Cython错误相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/544772.html