Jak skompilować.kod c Z Cython z gcc

Teraz, gdy pomyślnie zainstalowałem Cython na Windows 7, próbuję skompilować kod Cythona za pomocą Cythona, ale gcc utrudnia mi życie.

cdef void say_hello(name):
    print "Hello %s" % name

Użycie gcc do kompilacji kodu rzuca dziesiątki niezdefiniowanego odniesienia do - erros, i jestem prawie pewien, że libpython.a jest dostępny(jak powiedział samouczek instalacji, niezdefiniowanego odniesienia do - błędy są wyrzucane, jeśli brakuje tego pliku).

$ cython ctest.pyx
$ gcc ctest.c -I"C:\Python27\include"

C:\Users\niklas\AppData\Local\Temp\cckThGrF.o:ctest.c:(.text+0x1038): undefined reference to `_imp__PyString_FromStringAndSize'
C:\Users\niklas\AppData\Local\Temp\cckThGrF.o:ctest.c:(.text+0x1075): undefined reference to `_imp___Py_TrueStruct'
C:\Users\niklas\AppData\Local\Temp\cckThGrF.o:ctest.c:(.text+0x1086): undefined reference to `_imp___Py_ZeroStruct'
C:\Users\niklas\AppData\Local\Temp\cckThGrF.o:ctest.c:(.text+0x1099): undefined reference to `_imp___Py_NoneStruct'
C:\Users\niklas\AppData\Local\Temp\cckThGrF.o:ctest.c:(.text+0x10b8): undefined reference to `_imp__PyObject_IsTrue'
c:/program files/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../libmingw32.a(main.o):main.c:(.text+0xd2): undefined reference to `WinMain@16'
collect2: ld returned 1 exit status

Dziwne jest to, że używając pyximport * lub setup-skrypt działa całkiem dobrze, ale oba nie są zbyt przydatne podczas pracy nad modułem.

Jak skompilować pliki .c wygenerowane za pomocą Cythona przy użyciu gcc ?

lub jakikolwiek inny kompilator, ważne jest to, że będzie działać !


*pyximport: czy to normalne, że w zaimportowanym module znajdują się tylko funkcje i klasy natywne w Pythonie, a nie Cdef-functions and classes ? like:

# filename: cython_test.pyx
cdef c_foo():
    print "c_foo !"
def foo():
    print "foo !"
    c_foo()

import pyximport as p; p.install()
import cython_test
cython_test.foo()
# foo !\nc_foo !
cython_test.c_foo()
# AttributeError, module object has no attribute c_foo


UPDATE

Wywołanie $ gcc ctest.c "C:\Python27\libs\libpython27.a" zabija nieokreślone odniesienie do - erros, ale to:

c:/program files/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../libmingw32.a(main.o):main.c:(.text+0xd2): undefined reference to `WinMain@16'
Author: Niklas R, 2011-08-08

2 answers

Try:

gcc -c -IC:\Python27\include -o ctest.o ctest.c
gcc -shared -LC:\Python27\libs -o ctest.pyd ctest.o -lpython27

-shared tworzy bibliotekę współdzieloną. -lpython27 Linki z biblioteką importu C:\Python27\libs\libpython27.a.

 18
Author: eryksun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-09-17 11:43:02

To jest błąd linkera (ld), a nie Błąd kompilatora. Powinieneś podać ścieżkę do biblioteki (- l i-l), a nie tylko do nagłówków (- I).

 0
Author: Francesco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-08 16:23:20