【发布时间】:2014-07-14 00:39:38
【问题描述】:
---------更新--------------
发现了一些亮光here。
这样做的缺点是官方的 64 位 Python 版本不附带 libmsvcr90.a,我们需要将其链接到正确的 C 运行时 DLL。
-----------原帖-------
我的 Python 版本:
Python 3.3.5,在 Windows 中带有 MSC v.1600 64 位。已安装并使用 Windows SDK v7.1。我已经使用 Cython 一个星期了,它似乎可以很好地运行其他代码。
在这个link 中,它说round() 是内置函数之一。但是,当我在我的cython代码中调用它并使用cython my_code.pyx -a检查时,该函数是纯黄色的,这意味着使用了python方法。
然后我做了一些谷歌搜索,并使用了:
from libc.math cimport round
但它在编译期间显示“未解析的外部符号”。
我该怎么办?
代码如下:
from libc.math cimport round
cdef float a = 1.5
cdef float b
b = round(a)
print(b)
它说:致命错误 LNK1120: 1 unresolved externals error
我的 setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Build import cythonize
import numpy as np
extensions = [
Extension('test', ['test.pyx'], include_dirs = [np.get_include()]),
]
setup(
ext_modules = cythonize(extensions)
)
我知道在这种情况下 np.get_include() 确实没有必要,但我只是添加了它们,因为我经常使用 numpy 并且无论如何它不会对这种情况造成太大伤害。
我的编译命令:
python setup.py build_ext --inplace
结果(我实际上在我的机器上使用了 setup1.py):
X:\WorkFolder\DataAnalysis\lw9pg\mol>python setup1.py build_ext --inplace
运行 build_ext
构建“测试”扩展
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\Bin\amd64\cl.exe /c /nologo /Ox /MD /W3 /GS- /DNDEBUG -IX:\WinPython3\python-3.3.5。 amd64\include -IX:\WinPython3\python-3.3.5.amd64\include /Tctest.c /Fobuild\temp.win-amd64-3.3\Release\test.obj
测试.c
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\Bin\amd64\link.exe /DLL /nologo /INCREMENTAL:NO /LIBPATH:X:\WinPython3\python-3.3.5.amd64\libs LIBPATH: X:\WinPython3\python-3.3.5.amd64\PCbuild\amd64 /EXPORT:PyInit_test build\temp.win
-amd64-3.3\Release\test.obj /OUT:X:\WorkFolder\DataAnalysis\lw9pg\mol\test.pyd /IMPLIB:build\temp.win-amd64-3.3\Release\
test.lib /MANIFESTFILE:build\temp.win-amd64-3.3\Release\test.pyd.manifest
test.obj : 警告 LNK4197: export 'PyInit_test' 指定了多次;使用第一个规范
创建库 build\temp.win-amd64-3.3\Release\test.lib 和对象 build\temp.win-amd64-3.3\Release\test.exp
test.obj:错误 LNK2019:函数 __pyx_pf_4test_rounding
中引用的未解析的外部符号轮回
X:\WorkFolder\DataAnalysis\lw9pg\mol\test.pyd:致命错误 LNK1120:1 个未解决的外部问题
错误:命令 '"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\Bin\amd64\link.exe"' 失败,退出状态为 112
0
【问题讨论】:
-
你是如何使用它的?
-
@PadraicCunningham 感谢您的回复!我会在一分钟内发布我的代码。我忘了这样做......对不起。
-
所以你正在编译你发布的内容?
-
@PadraicCunningham 是的,我是。但我还没有尝试过 ipython 魔法。
-
我不确定问题出在哪里:您链接的文档确实说
round可用,但同一篇文章说enumerate和slice也可用。说命名空间中有内置函数与有 C 版本不同。