Найти - Пользователи
Полная версия: Расширение
Начало » Python для экспертов » Расширение
1 2
nerezus
#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 юзаю, когда в нем делаю, он линкует, но с неправильными параметрами.
slav0nic
-Lпуть_к_либам -lpython25 добавь
nerezus
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
nerezus
“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 теперь.
bialix
почему вы не пользуетесь поддержкой в distutils? напишите setup.py, потом

setup.py build_ext –compiler=mingw32

должно работать.
OlDer
nerezus
Хотелось бы под gcc теперь.
Вот этот gcc попробуйте использовать: http://www.develer.com/oss/GccWinBinaries
Он при установке сам прописывается в distutils и потом под винду все компилируется простой командой:
python setyp.py bdist_egg
;)
bialix
OlDer
nerezus
Хотелось бы под gcc теперь.
Вот этот gcc попробуйте использовать: http://www.develer.com/oss/GccWinBinaries
Он при установке сам прописывается в distutils и потом под винду все компилируется простой командой:
python setyp.py bdist_egg
;)
bdist_egg?
OlDer
bialix
bdist_egg?
Да, а что не так? Вернее, я вижу, что неправильно написал слово “setup”, а bdist_egg, вроде, правильно? ;)
SAnty
Как сделать расширения для Пайтона используя компиляторы С\С++

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
bialix
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
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB