[Python] Cython ImportError: ./region.so: undefined symbol: G_get_window
Pietro
peter.zamb a gmail.com
Ven 27 Set 2013 11:21:52 CEST
Per completezza visto che oggi ho avuto il tempo per risolvere questa
vecchia questione...
2013/8/10 Enrico Franchi <enrico.franchi a gmail.com>:
> On Aug 10, 2013, at 7:40 PM, Pietro <peter.zamb a gmail.com> wrote:
>
>> Come devo fare per fare il link a "grass/gis.h"?
>
> Non puoi linkare ad un header. Quello che devi fare e' linkare alla libreria dinamica di GIS.
per fare il link è sufficiente modificare il setup.py aggiungendo
l'opzione "libraries" quando si instanzia la classe Extension,
maggiori informazioni sono disponibili qui:
http://docs.python.org/2/extending/building.html
il mio setup.py è diventato:
{{{
# -*- coding: utf-8 -*-
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
import os
GISBASE = os.getenv('GISBASE')
INCLUDE_DIR = os.path.join(GISBASE, 'include') # include
LIB_DIR = os.path.join(GISBASE, 'lib') # lib
setup(
cmdclass={'build_ext': build_ext},
ext_modules=[Extension("region", ["region.pyx"],
include_dirs=[INCLUDE_DIR, ],
libraries=['grass_gis'],
library_dirs=[LIB_DIR, ],
)
]
)
}}}
Nel mio caso la variabile d'ambiente "GISBASE" è il path di
installazione del programma, al suo interno si trovano le directory
"include" con gli headers e "lib" con le libraries compilate,
nell'esempio sopra riportato sto utilizzando la libreria
libgrass_gis.so
Buona giornata.
Pietro
Maggiori informazioni sulla lista
Python