[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