在C代码中找不到库

时间:2018-05-30 11:37:30

标签: python c cython cythonize

我正在尝试使用cython编译模块,但编译器无法在外部c文件中找到包含库(我使用cmath作为示例,但我想要的其他库如cstdiocstdintcstring有同样的问题)

最小的例子由以下4个简单文件组成:

cfile.c:

#include <cmath>

test_pxd.pxd:

cdef extern from "cfile.c":
    pass

test.pyx:

cimport test_pxd

setup.py:

from distutils.core import Extension, setup
from Cython.Build import cythonize

sources = ['test.pyx']

extension = [Extension('test',sources)]

setup(ext_modules=cythonize(extension,force=True))

如果我使用以下代码运行setup.py

 python3 setup.py build_ext --inplace

我收到错误:

  

cfile.c:1:17:致命错误:cmath:没有这样的文件或目录

应该注意的是,只需直接编译c文件,例如使用g++ -c cfile.c,就不需要任何额外的链接来让编译器找到这些库。

如何让cython中的编译器在外部c文件中找到cmath(以及其他如cstdiocstdintcstring)库?< / p>

1 个答案:

答案 0 :(得分:0)

定义应该反对标题,而不是实现:

constructor(private activatedRoute: ActivatedRoute) {}

this.activatedRoute.params.subscribe((params: Params) => {
        let token = params['token'];
        console.log(token);
      });

如果使用C ++库,必须将cdef extern from "cfile.h": pass 指令添加到setuptools / cythonize。

language='c++'

另见docs