[SciPy-user] [weave] newbie : compilation issue
Jean-Baptiste Richet - AREAS
jb.richet.areas at normandnet.fr
Thu Sep 18 11:35:21 EDT 2003
Hi,
I'm trying to have weave take my C functions into Python. I try to build
a module with ext_tools, but I don't know much about writing Python
extensions (actually, nothing). I just try to guess how to do from the
tutorial and its examples. But of course it doesn't work.
First, let me give you the error message:
=============================
jb at areas:~/routines/commun$ python ext_date.py
/home/jb/routines/commun/date_ext.cpp: In function `struct PyObject *
c_positionne_flot(PyObject *, PyObject *, PyObject *)':
/home/jb/routines/commun/date_ext.cpp:925: `raw_locals' undeclared
(first use this function)
/home/jb/routines/commun/date_ext.cpp:925: (Each undeclared identifier
is reported only once
/home/jb/routines/commun/date_ext.cpp:925: for each function it appears in.)
/home/jb/routines/commun/date_ext.cpp:925: `raw_globals' undeclared
(first use this function)
/home/jb/routines/commun/date_ext.cpp:925: implicit declaration of
function `int get_variable(...)'
Traceback (most recent call last):
File "ext_date.py", line 50, in ?
build_date()
File "ext_date.py", line 45, in build_date
module.compile()
File "/usr/local/lib/python2.3/site-packages/weave/ext_tools.py", line
349, in compile
verbose = verbose, **kw)
File "/usr/local/lib/python2.3/site-packages/weave/build_tools.py",
line 194,
in build_extension
setup(name = module_name, ext_modules = [ext],verbose=verb)
File "/usr/local/lib/python2.3/distutils/core.py", line 166, in setup
raise SystemExit, "error: " + str(msg)
weave.build_tools.CompileError: error: command 'gcc' failed with exit
status 1
jb at areas:~/routines/commun$
====================================
Maybe I lack some #include or something like that ?
The line :
PyObject* py_file = get_variable("fichier_src",raw_locals,raw_globals);
from which the error is raised, was found in the weave tutorial about file conversions. I can hardly understand what it does.
Here is the code at the bottom of the message.
[I hesitate to give the date.c code, or the date_ext.cpp code, it's a bit long, and there's no compile error from it. If you need it to help me, please tell me.]
thanks for your help,
JBR
================ ext_date.py =========================
# -*- coding: UTF-8 -*-
#test d'utilisation de weave pour créer une bibliothèque
from weave import ext_tools
fichier_date_c = open('date.c','r')
code_date_c = fichier_date_c.read()
fichier_src = fichier_date_c
fichier_log = open('log.log','w')
pdt = 'a'
date = 1.23
def build_date():
"""contruit le module d'extension
"""
module = ext_tools.ext_module('date_ext')
#fonction de positionnement dans un fichier
"""
positionne_flot a 4 arguments, un p_pointeur de fichier en lecture,
un p_pointeur de fichier en écriture (log), un caractère et une
date (double)
"""
ext_code = """
PyObject* py_file = get_variable("fichier_src",raw_locals,raw_globals);
FILE* file = py_to_file(py_file,"fichier_src");
PyObject* py_log = get_variable("fichier_log",raw_locals,raw_globals);
FILE* log = py_to_file(py_log,"fichier_log");
FILE** p_file = &file;
FILE** p_log = &log;
char c_pdt = std::string(pdt).c_str()[0];
int resultat;
resultat = positionne_flot(p_file,c_pdt,date,p_log);
return_val = Py::new_reference_to(Py::Int(resultat));
"""
fonction = ext_tools.ext_function('c_positionne_flot',ext_code,['fichier_src','pdt','date','fichier_log'])
fonction.customize.add_support_code(code_date_c)
module.add_function(fonction)
module.compile()
try:
import date_ext
except ImportError:
build_date()
import date_ext
=============================================
--
Jean-Baptiste Richet
AREAS
_________________________________
Association régionale pour l'étude
et l'amélioration des sols
2, avenue Foch
76460 Saint Valéry en Caux
tél : +33 2 35 97 25 12
fax : +33 2 35 97 25 73
_________________________________
More information about the SciPy-User
mailing list