【发布时间】:2015-07-07 18:23:57
【问题描述】:
所以我试图用 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 <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
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"
我读到了这个堆栈溢出线程 Using Cython To Link Python To A Shared Library
但遵循它会给我带来不同的错误。如果我尝试将 rmsd.h 放入源中,它会说它无法识别文件类型。
How to link custom C (which itself needs special linking options to compile) with Cython?
这看起来很有希望,但我不确定如何使用它。
请帮忙!
【问题讨论】:
标签: c++ c linker cython distutils