我正在使用Cython来加速我的一些Python代码。我之前成功使用过它。但现在我需要在我的.pyx文件中从libc.math导入一些函数。
from libc.math cimport lgamma, exp, log
并在尝试构建文件时出现以下错误。
> python setup.py build_ext -i
运行build_ext
cythoning tradeclass.pyx to tradeclass.c
建立' tradeclass'扩展
C:\ Users \ js \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ for Python \ 9.0 \ VC \ Bin \ amd64 \ cl.exe / c / nologo / Ox / MD / W3 / GS- / DNDEBU G
...
tradeclass.c(4969):警告C4013:' lgamma'不确定的;假设extern返回int
...
C:\ Users \ js \ AppData \ Local \ Programs \ Common \ Microsoft \ Visual C ++ for Python \ 9.0 \ VC \ Bin \ amd64 \ link.exe / DLL / nologo / INCREMENTAL:NO / LIB 路径:C:\ Users \ js \ AppData \ Local \ Continuum \ Anaconda2 \ libs / LIBPATH:C:\ Users \ js \ AppData \ Local \ Continuum \ Anaconda2 \ PCbuild \ amd64 / LIBPATH:C:\ Users \ js \ AppData \ Local \ Continuum \ Anaconda2 \ PC \ VS9.0 \ amd64 / EXPORT:inittradeclass build \ temp.win-amd64-2.7 \ Release \ tradecla ss.obj" / OUT:h:\ Classification \ Classification Algos \ My Algo beta dist \ tradeclass.pyd" /IMPLIB:build\temp.win-amd64-2.7\Release\tradecl ass.lib /MANIFESTFILE:build\temp.win-amd64-2.7\Release\tradeclass.pyd.manifest
...
创建库build \ temp.win-amd64-2.7 \ Release \ tradeclass.lib和object build \ temp.win-amd64-2.7 \ Release \ tradeclass.exp tradeclass.obj:错误LNK2019:函数__pyx_f_10tradeclass_betapdf中引用的未解析的外部符号lgamma
如果没有我的pyx-script中的lgamma函数,文件将被构建而不会出现任何错误。经过广泛的搜索后,我发现libc.math的C99函数(lgamma所属的)在Windows下运行有问题(我使用的是Windows 7)。
为什么这样,更重要的是我该怎么办才能在我的pyx-script中使用lgamma ?
(我使用python作为科学家,而不是开发人员,因此我对计算机和操作系统内部工作的了解非常有限,因为我在这些领域中使用的术语的词汇也是如此。)