compiling Cython with MinGW - undefined reference

2019-05-25 10:55发布

I'm trying to compile a simple code snippet from the book "Cython - A guide for Python programmers", and when i compile, i get the following error:

H:\Cython>python setup.py build_ext -i --compiler=mingw32  
running build_ext  
building 'fib' extension  
C:\MinGW\bin\gcc.exe -mdll -O -Wall -IC:\Anaconda3\include -IC:\Anaconda3\include -c fib.c -o build\temp.win32-3.4\Release\fib.o  
writing build\temp.win32-3.4\Release\fib.def  
C:\MinGW\bin\gcc.exe -shared -s build\temp.win32-3.4\Release\fib.o build\temp.win32-3.4\Release\fib.def -LC:\Anaconda3\libs -LC:\Ana  
conda3\PCbuild -lpython34 -lmsvcr100 -o H:\Cython\fib.pyd  
build\temp.win32-3.4\Release\fib.o:fib.c:(.text+0xb6): undefined reference to `_imp__PyExc_TypeError'  
build\temp.win32-3.4\Release\fib.o:fib.c:(.text+0xf3): undefined reference to `_imp__PyExc_TypeError'  
build\temp.win32-3.4\Release\fib.o:fib.c:(.text+0x3cc): undefined reference to `_imp___PyThreadState_Current'  
build\temp.win32-3.4\Release\fib.o:fib.c:(.text+0x857): undefined reference to `_imp__PyExc_NameError'  
build\temp.win32-3.4\Release\fib.o:fib.c:(.text+0xa55): undefined reference to `_imp__PyExc_ImportError'  
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/bin/ld.exe: build\temp.win32-3.4\Release\fib.o: bad reloc address 0x0 in s  
ection `.data'  
collect2.exe: error: ld returned 1 exit status  
error: command 'C:\\MinGW\\bin\\gcc.exe' failed with exit status 1  

H:\Cython>

setup.py:

from distutils.core import setup
from Cython.Build import cythonize
setup(ext_modules=cythonize('fib.pyx'))

fib.pyx:

def fib(int n):
    cdef int i
    cdef double a=0.0, b=1.0
    for i in range(n):
        a, b = a + b, a
    return a

When I google this problem, others who have had the error had a mix between 32 and 64 bit stuff, I'm not doing that.

1条回答
倾城 Initia
2楼-- · 2019-05-25 11:27

I sat down and looked the errors over again today, and found the issue. The problem is that I used Anaconda rather than compiling everything from scratch myself - that means that some Cython components were compiled with MSVC. As above you can see that I'm trying to use MinGW to compile the Cython test script. Why mixing compilers like that doesn't work is outside my scope of knowledge, but it doesn't. Compiling my Cython test scripts with MSVC works.
(use Visual Studio C++ 2008/2010 for python 2.x/3.x respectively)

As for the reason that I attempted to use MinGW (against standard recommendation) was that my msiserver service had somehow broken (I'm on an old laptop, so i don't recall the reason), and was hoping to find a quick way out, rather than fixing the msiserver service.

The fix for the msiserver service is pretty unrelated to this question, but it was rather hard to find, so i figured I'd link and mirror it here:

http://www.vistax64.com/vista-installation-setup/96680-repair-windows-installer-service-vista-all-versions.html

For all those unfortunate souls searching and Googling for how to repair the Windows Installer Service, I have some info for you. A couple days ago I tried to uninstall one of my apps and stalled on an error "Windows Installer Service cannot be accessed". After many trials and errors trying to fix this issue, I stumbled upon a new fix for this issue that has worked in all these situations where the Windows Installer Service will not manually start and in essense, not allow install or uninstall tasks to complete.

Here's the easy steps:

1. Go to a Windows Vista (Any Version) computer that has the Windows
Installer service running correctly and run regedit(Start-Run-Regedit)
2. Go to the location
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\msiserver
3. Right click on this key and select "Export" and save the key to a Flash
Drive or other.
4. Run sfc /scannow on the damaged Vista computer - you won't need the
install disk as it goes to backup files on your HD. Do not reboot when
complete
5. Double click saved .reg file from working machine and import registry
settings into damaged Vista computer.
6. Now reboot and try to install/uninstall

If many of you have success with this method, please post this fix around the WWW as I went through over 1000 links with users having the same problem and not being able to solve it. Shame on Microsoft, very sloppy. It would have been so nice if Microsoft released Windows Installer 4.0 as a standalone installation with Vista's release so I could have repaired it, most users have been doing fresh installs to fix this. Get your act together Microsoft!!!!

The CAT

Thank you, the cat.

查看更多
登录 后发表回答