我刚刚使用Anaconda / Condas在我的Windows 7 64位机器上安装了Python 3.4。
当我运行"hello world" cython example时,我收到此错误:
[py34] C:\Users\Jon\Documents\GitHub\CythonFunctions\cython_funcs>python setup.py build_ext --inplace
running build_ext
building 'cython_funcs.hello' extension
C:\Anaconda\envs\py34\MinGW\bin\gcc.exe -mdll -O -Wall -IC:\Anaconda\envs\py34\include -IC:\Anaconda\envs\py34\include -c hello.c -o build\temp.win-amd64-3.4\Release\hello.o
writing build\temp.win-amd64-3.4\Release\hello.def
C:\Anaconda\envs\py34\MinGW\bin\gcc.exe -shared -s build\temp.win-amd64-3.4\Release\hello.o build\temp.win-amd64-3.4\Release\hello.def -LC:\Anaconda\envs\py34\libs -LC:\Anaconda\envs\py34\PCbuild\amd6
4 -lpython34 -lmsvcr100 -o C:\Users\Jon\Documents\GitHub\CythonFunctions\cython_funcs\cython_funcs\hello.pyd
build\temp.win-amd64-3.4\Release\hello.o:hello.c:(.text+0x314): undefined reference to `__imp__PyThreadState_Current'
build\temp.win-amd64-3.4\Release\hello.o:hello.c:(.text+0x493): undefined reference to `__imp__Py_NoneStruct'
build\temp.win-amd64-3.4\Release\hello.o:hello.c:(.text+0x97b): undefined reference to `__imp_PyExc_ImportError'
collect2.exe: error: ld returned 1 exit status
error: command 'C:\\Anaconda\\envs\\py34\\MinGW\\bin\\gcc.exe' failed with exit status 1
从搜索stackoverflow和google时,当gcc和python版本都不是32位或64位时会发生此错误。
我已经检查过我的Python是64位。从下面的路径可以看出,我所拥有的MinGW是我的Python安装的一部分。如何检查它是否为64位?或者这个错误可能是由于其他原因造成的?
更新
奇怪的是,Ipython cythonmagic命令在这里工作正常:
http://docs.cython.org/src/quickstart/build.html?highlight=cythonmagic
答案 0 :(得分:2)
一种方法是conda remove libpython
(这将导致distutils不使用mingw),并安装Visual Studio 2010,并使用它进行编译。
答案 1 :(得分:1)
您的gcc行缺少定义:WITH cteFiltered AS
(select c.Name as Hall, b.Title,
Convert(time,a.StartFilmTime) as StartFilm,
Convert(time,a.EndFilmTime) as EndTime
from FilmSchedule a
left join Film b on a.FilmId = b.Id
left join Room c on a.RoomId = c.Id
where a.ApproveStatus = 1 and a.Status = 1
and CONVERT(date, a.StartFilmTime) = '05-06-2015'
)
select
a.Hall,
a.Title,
STUFF((SELECT ', ' + '[' + CONVERT(varchar(2),DATEPART(Hour, b.StartFilm))
+ ':' + CONVERT(varchar(2),DATEPART(Minute, b.StartFilm))
+ ' ' + CONVERT(varchar(2),DATEPART(Hour, b.EndTime))
+ ':' + CONVERT(varchar(2),DATEPART(Minute, b.EndTime))
+ ']'
FROM
cteFiltered b
Where
a.Hall = b.Hall and a.Title = b.Title
order by b.StartFilm -- ***
FOR XML PATH('')),1,1,'') As ShowTime
from
cteFiltered a
group by a.Hall, a.Title
order by ShowTime; -- *** Hour is first (assuming 24H format) and only one day
。 Anaconda(我推测)修改了2.7 envs的-DMS_WIN64
中的文件cygwinccompiler.py
,但这种修改在3.4 env的distutils中不存在。我得到了不同的错误,但这个改变修复了我的设置。
答案 2 :(得分:0)
我遇到了与Anaconda类似的问题,但是当我停止尝试在py34目录中编译时它起了作用。而是将您的helloworld.pyx文件(确保将其更改为扩展名.pyx)与setup.py一起放在Anaconda3文件夹中,当您编译时确保您也在Anaconda3文件夹中,因此C:\ Anaconda3 python setup.py build_ext --inplace。如果内存服务,那就运行得很好。
答案 3 :(得分:0)
这可能适用于链接问题(要在临时目录中完成; 复制而不是 cp ,如果不在msys2环境中)
gendef c:/Windows/System32/python34.dll
dlltool -U -d python34.def -l libpython34.dll.a
cp libpython34.dll.a c:/Python34/libs
如果 gendef 无法访问 python34.dll ,可以在 gendef 命令之前使用Windows资源管理器复制它。
gendef 至少可以使用 mingw-w64 包。