L'esecuzione presuppone che il file C .h contenga solo #defines (e quindi non contenga nulla di esterno rispetto al collegamento), quindi quanto segue funzionerebbe con swig 2.0 (http://www.swig.org/) e python 2.7 (testato). Supponiamo che il file contenente solo definisce il nome just_defines.h come sopra:
#define FOO_A 0x3
#define FOO_B 0x5
Poi:
swig -python -module just just_defines.h ## generates just_defines.py and just_defines_wrap.c
gcc -c -fpic just_defines_wrap.c -I/usr/include/python2.7 -I. ## creates just_defines_wrap.o
gcc -shared just_defines_wrap.o -o _just.so ## create _just.so, goes with just_defines.py
Usage:
$ python
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import just
>>> dir(just)
['FOO_A', 'FOO_B', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '_just', '_newclass', '_object', '_swig_getattr', '_swig_property', '_swig_repr', '_swig_setattr', '_swig_setattr_nondynamic']
>>> just.FOO_A
3
>>> just.FOO_B
5
>>>
Se il file .h contiene anche punti di ingresso, quindi è necessario collegarsi a una libreria (o più) per risolvere tali punti di ingresso. Ciò rende la soluzione un po 'più complicata dal momento che potrebbe essere necessario scovare le librerie corrette. Ma per un "solo definisce caso" non devi preoccuparti di questo.
possibile duplicato del [affidabile conversione di macro del preprocessore C da codice Python] (http://stackoverflow.com/questions/2654329/reliably-converting-c-preproce ssor-macros-to-python-code) –
Penso che questo sia un duplicato per http://stackoverflow.com/questions/2654329/reliable-converting-c-preprocessor-macros-to-python-code –
@MattiLyra - Forse . Ma visto che quella domanda al momento non ha risposte, questo non è un punto particolarmente utile. –