Уведомления

Jabber-конференция сообщества: pythonua@conference.jabber.ru

#1 Апрель 22, 2007 16:48:40

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение

#include <Python.h>
#include <string.h>

static PyObject *message(PyObject *self, PyObject *args) {
char *fromPython, result;
if (!PyArg_Parse(args, “(s)”, &fromPython)) {
return NULL;
} else {
strcpy(result, “Hello ”);
strcat(result, fromPython);
return Py_BuildValue(“s”, result);
}
}

static struct PyMethodDef hello_methods = {
{“message”, message, 1},
{NULL, NULL}
};

void inithello() {
(void) Py_InitModule(“hello”, hello_methods);
}


Вопрос: как компилить под виндой?
gcc –static “-IC:\Devel\Python25\Include” main.c -o hello.dll
Но тут надо прилинковать файл. libpython25.a Как?
-l пробовал в куче вариантов, не находит =\
gcc из Code::Blocks юзаю, когда в нем делаю, он линкует, но с неправильными параметрами.



Офлайн

#2 Апрель 22, 2007 17:23:36

slav0nic
Команда
От: dp.ua
Зарегистрирован: 2006-05-07
Сообщения: 2169
Репутация: +  36  -
Профиль   Отправить e-mail  

Расширение

-Lпуть_к_либам -lpython25 добавь

Офлайн

#3 Апрель 22, 2007 17:38:45

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение

C:\!Docs\!python\ext>gcc --static "-IC:\Devel\Python25\Include" "-LC:\Devel\Python25\libs" -lpython25 hello.c -o hello.dll
C:\DOCUME~1\ner\LOCALS~1\Temp/ccyYbaaa.o:hello.c:(.text+0x1f): undefined reference to `_imp__PyArg_Parse'
C:\DOCUME~1\ner\LOCALS~1\Temp/ccyYbaaa.o:hello.c:(.text+0x72): undefined reference to `_imp__Py_BuildValue'
C:\DOCUME~1\ner\LOCALS~1\Temp/ccyYbaaa.o:hello.c:(.text+0xb4): undefined reference to `_imp__Py_InitModule4'
C:/Devel/CodeBlocks/bin/../lib/gcc/mingw32/3.4.4/../../..\libmingw32.a(main.o):main.c:(.text+0x106): undefined reference
 to `WinMain@16'
collect2: ld returned 1 exit status



Офлайн

#4 Апрель 22, 2007 19:45:48

nerezus
От:
Зарегистрирован: 2006-08-01
Сообщения: 178
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение

“C:\Program Files\Microsoft Visual Studio\VC98\Bin\cl.exe” /nologo /TC /IC:\Devel\Python25\Include /GD hello.c /link /DLL /LIBPATH:C:\Devel\Python25\libs /RELEASE /EXPORT:inithello /out:hello.pyd
Этим под VS6 компилит. Хотелось бы под gcc теперь.



Офлайн

#5 Апрель 23, 2007 00:44:46

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Расширение

почему вы не пользуетесь поддержкой в distutils? напишите setup.py, потом

setup.py build_ext –compiler=mingw32

должно работать.



Офлайн

#6 Апрель 24, 2007 11:10:49

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение

nerezus
Хотелось бы под gcc теперь.
Вот этот gcc попробуйте использовать: http://www.develer.com/oss/GccWinBinaries
Он при установке сам прописывается в distutils и потом под винду все компилируется простой командой:
python setyp.py bdist_egg
;)



Офлайн

#7 Апрель 24, 2007 15:39:40

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Расширение

OlDer
nerezus
Хотелось бы под gcc теперь.
Вот этот gcc попробуйте использовать: http://www.develer.com/oss/GccWinBinaries
Он при установке сам прописывается в distutils и потом под винду все компилируется простой командой:
python setyp.py bdist_egg
;)
bdist_egg?



Офлайн

#8 Апрель 24, 2007 16:33:52

OlDer
От:
Зарегистрирован: 2006-07-19
Сообщения: 133
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение

bialix
bdist_egg?
Да, а что не так? Вернее, я вижу, что неправильно написал слово “setup”, а bdist_egg, вроде, правильно? ;)



Офлайн

#9 Апрель 24, 2007 16:48:11

SAnty
От:
Зарегистрирован: 2006-04-21
Сообщения: 34
Репутация: +  0  -
Профиль   Отправить e-mail  

Расширение

Как сделать расширения для Пайтона используя компиляторы С\С++

http://www.geocities.com/foetsch/python/extending_python.htm
http://sebsauvage.net/python/mingw.html
http://www.swig.org/papers/PyTutorial98/PyTutorial98.pdf
http://boodebr.org/main/python/build-windows-extensions


Вообще то для написания расширений можна использовать более простой вариант, например использовать утилиту SWIG или язык PyRex.

Очень неплохо использовать для создания расширений модуль Boost.Python
http://www.boost.org/libs/python/doc/tutorial/doc/html/python/techniques.html
Примеры использования Boost with Python здесь http://www.codesampler.com/python.htm



Офлайн

#10 Апрель 24, 2007 18:25:35

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

Расширение

OlDer
bialix
bdist_egg?
Да, а что не так? Вернее, я вижу, что неправильно написал слово “setup”, а bdist_egg, вроде, правильно? ;)
Я надеюсь вы улавливаете разницу между 3 буквами ext и 3 буквами egg.

> python setup.py --help-commands
Standard commands:
build build everything needed to install
build_py "build" pure Python modules (copy to build directory)
build_ext build C/C++ extensions (compile/link to build directory)
build_clib build C/C++ libraries used by Python extensions
build_scripts "build" scripts (copy and fixup #! line)
clean clean up output of 'build' command
install install everything from build directory
install_lib install all Python modules (extensions and pure Python)
install_headers install C/C++ header files
install_scripts install scripts (Python or otherwise)
install_data install data files
sdist create a source distribution (tarball, zip file, etc.)
register register the distribution with the Python package index
bdist create a built (binary) distribution
bdist_dumb create a "dumb" built distribution
bdist_rpm create an RPM distribution
bdist_wininst create an executable installer for MS Windows

usage: setup.py [global_opts] cmd1 [cmd1_opts] [cmd2 [cmd2_opts] ...]
or: setup.py --help [cmd1 cmd2 ...]
or: setup.py --help-commands
or: setup.py cmd --help



Отредактировано (Апрель 24, 2007 18:26:02)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version