Python.h trovato da Locate ma non da GCC


12

Ho appena scritto un semplice eseguibile C per verificare se Python.hfunziona o no

#include<Python.h>
#include<stdio.h>
int main()
{
    printf("this is a python header file included programm\n");
    return 0;
}

Ovviamente, non fa molto. Tuttavia, quando provo a compilarlo con gccmi dà un errore:

foo.c:1:19: fatal error: Python.h: No such file or directory.

Poi ho controllato per vedere se il pacchetto python-devInstalla python-dev è stato Python.hinstallato o meno locate.

$locate Python.h
/usr/include/python2.7/Python.h

Mi è chiaro che ho il Python.hfile header sul mio sistema. Come faccio a far funzionare il mio eseguibile?


Benvenuto in askubuntu! Correggimi se sbaglio, ma suppongo che il compilatore non trovi Python.h perché non si trova nella tua directory di lavoro e il percorso completo non è stato specificato.
Elder Geek

Risposte:


18

Devi qualificare la tua inclusione

#include <python2.7/Python.h>

Oppure dì a gcc dove trovare Python.h con il

gcc -I /usr/include/python2.7/ program.c 

7

Devi fornire a GCC il percorso di inclusione per l' Python.hintestazione. Questo può essere fatto con la -Ibandiera:

gcc -c -I / usr / include / python2.7 sourcefile.c

Tuttavia, c'è un modo migliore: usa pkg-configInstalla pkg-config :

pkg-config --cags flag python

Questo produrrà i flag che devono essere passati a GCC per compilare applicazioni che usano le intestazioni e le librerie Python.

Durante il collegamento, utilizzare l'output di questo comando per includere le librerie appropriate:

pkg-config --libs python

Puoi anche combinare entrambi i passaggi con:

gcc `pkg-config --cflags --libs python` sourcefile.c

Dopo "gcc -c -I ..." ho solo file con estensione .o, come posso ottenere un file eseguibile?
RS

@RS Devi collegarlo, prova a fare qualcosa del genere:"gcc file.o -o program"
Nathan Osman,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.