2009-03-15 9 views
8

Sto cercando di ottenere Python in esecuzione con swig per fare C/C++. Sto eseguendo il tutorial here, 'costruzione di un modulo python'. Quando faccio la chiamataUna banale domanda di errore SWIG Python

gcc -c example.c example_wrap.c -I /my_correct_path/python2.5 

ottengo un errore:

my_correct_path/python2.5/pyport.h:761:2: error: #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)." 
example_wrap.c: In function 'SWIG_Python_ConvertFunctionPtr': 
example_wrap.c:2034: warning: initialization discards qualifiers from pointer target type 
example_wrap.c: In function 'SWIG_Python_FixMethods': 
example_wrap.c:3232: warning: initialization discards qualifiers from pointer target type 

Fa effettivamente creare un file example.o, ma non funziona. Sto usando python2.5 non 2.1 come nell'esempio, questo è un problema? L'errore (tutto il resto è solo un 'avvertimento') dice qualcosa sulla piattaforma sbagliata. Questa è una macchina a 64 bit; questo è un problema? Il mio gcc è configurato in modo errato per la mia macchina? Come faccio a superare questo?

AGGIORNAMENTO: ho ancora problemi. Come faccio a implementare questa "correzione"?

+0

l'errore è probabilmente correlato alla piattaforma 64 bit. la versione Python non è un problema. – Vasil

risposta

7

Ho trovato questo thread alla ricerca di una risposta per lo stesso errore "LONGBIT" durante l'installazione di python readline per python 32 bit a 64 bit. Il link non ha la risposta diretta, quindi ho dovuto google ulteriormente per la risposta (che potrebbe essere semplice per gli utenti/devs di Linux stagionati). Per riferimento futuro, la soluzione è forzare 32 bit usando "-m32" nella variabile di ambiente CFLAGS.

bash-3.2$ easy_install readline 
Searching for readline 
Reading http://pypi.python.org/simple/readline/ 
Reading http://www.python.org/ 
Best match: readline 2.6.4 
Downloading http://pypi.python.org/packages/source/r/readline/readline-2.6.4.tar.gz#md5=7568e8b78f383443ba57c9afec6f4285 
Processing readline-2.6.4.tar.gz 
Running readline-2.6.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-mqr9wH/readline-2.6.4/egg-dist-tmp-p3apfF 
In file included from /usr/local/python2.6/include/python2.6/Python.h:58, 
       from Modules/readline.c:8: 
/usr/local/python2.6/include/python2.6/pyport.h:685:2: error: #error "LONG_BIT definition appears wrong for platform (bad gcc/glibc config?)." 
error: Setup script exited with error: command 'gcc' failed with exit status 1 

ho poi provato con CFLAGS = -m32:

bash-3.2$ CFLAGS=-m32 easy_install readline 
Searching for readline 
Reading http://pypi.python.org/simple/readline/ 
Reading http://www.python.org/ 
Best match: readline 2.6.4 
Downloading http://pypi.python.org/packages/source/r/readline/readline-2.6.4.tar.gz#md5=7568e8b78f383443ba57c9afec6f4285 
Processing readline-2.6.4.tar.gz 
Running readline-2.6.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-uauVci/readline-2.6.4/egg-dist-tmp-YY0tQa 
In file included from /usr/include/features.h:352, 
       from /usr/include/limits.h:27, 
       from /usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/limits.h:122, 
       from /usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/syslimits.h:7, 
       from /usr/lib/gcc/x86_64-redhat-linux/4.1.2/include/limits.h:11, 
       from /usr/local/python2.6/include/python2.6/Python.h:19, 
       from Modules/readline.c:8: 
/usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file or directory 
error: Setup script exited with error: command 'gcc' failed with exit status 1 

L'ultimo errore è causa di non avere pacchetto glibc-devel per 32bit (grazie a this thread). Ho anche dovuto installare ncurses-devel.i386 e poi easy_install è passato e ipython lo ha riconosciuto. La mia vita si è rovinata fino a quando non ho funzionato per il bene di ipython.

bash-3.2$ CFLAGS=-m32 easy_install readline 
Searching for readline 
Reading http://pypi.python.org/simple/readline/ 
Reading http://www.python.org/ 
Best match: readline 2.6.4 
Downloading http://pypi.python.org/packages/source/r/readline/readline-2.6.4.tar.gz#md5=7568e8b78f383443ba57c9afec6f4285 
Processing readline-2.6.4.tar.gz 
Running readline-2.6.4/setup.py -q bdist_egg --dist-dir /tmp/easy_install-dHly4D/readline-2.6.4/egg-dist-tmp-oIEDYl 
Adding readline 2.6.4 to easy-install.pth file 

Installed /home/hari/bin/python/lib/python2.6/site-packages/readline-2.6.4-py2.6-linux-x86_64.egg 
Processing dependencies for readline 
Finished processing dependencies for readline 
2

Ho avuto lo stesso errore durante il tentativo di installare un pacchetto Python, ma l'ho risolto.
L'errore "LONG_BIT" era:

$ easy_install astropy 
/my_path/epd/epd-7.3-2-rh5-x86/include/python2.7/pyport.h:849:2: 
error: #error "LONG_BIT definition appears wrong for platform 
(bad gcc/glibc config?)." error: Setup script exited with error: 
command 'gcc' failed with exit status 1 

Come lei suggerisce, Alex, ho dovuto installare la versione corretta di EPD di Python per soddisfare il requisito della mia macchina e quella del pacchetto che ho voluto installare. C'erano versioni parallele di Python in esecuzione e penso che sia da lì che provengono la confusione e l'errore. Vai a Enthought's Repository (fai clic su "Accedi al repository" -> Programmi di installazione) e installa la versione corretta.

Assicurati di ripulire le cose (o di chiedere a qualcuno che sa cosa stanno facendo di fare questo per te) rimuovendo le vecchie versioni di Python. Quindi, ovviamente, modifica il percorso .cshrc in modo che punti alla nuova versione e apri il file correttamente. Non ho avuto problemi dopo averlo fatto.

Mi rendo conto che questa domanda è stata fatta 4 anni fa!

+2

Non c'è niente di sbagliato nel rispondere a una domanda di 4 anni. Anche se l'OP è lungo, la risposta potrebbe essere utile per qualcuno che fa una ricerca in futuro. –

2

In realtà ho trovato questo thread due volte, a un paio di anni, entrambi durante il tentativo di installare libxml2 dalla fonte. Lo script configure della libreria ha in realtà l'opzione --without-python, che ho utilizzato invece di provare a correggere l'errore.

+0

ha appena avuto lo stesso problema, grazie –