web-dev-qa-db-fra.com

Python.h trouvé par loc mais pas par GCC

Je viens d'écrire un simple exécutable en C pour vérifier si Python.h fonctionne ou non

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

Evidemment, ça ne fait pas grand chose. Cependant, lorsque j'essaie de le compiler avec gcc, cela me donne une erreur:

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

Puis j’ai vérifié si le python-dev Install python-dev le paquet a Python.h installé ou n'utilise pas locate.

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

Il est clair pour moi que j'ai le fichier d'en-tête Python.h sur mon système. Comment faire fonctionner mon exécutable?

11
user2738777

Vous devez qualifier votre include

#include <python2.7/Python.h>

Ou dites à gcc où trouver Python.h avec le

gcc -I /usr/include/python2.7/ program.c 
18
0x7c0

Vous devez fournir à GCC le chemin d’inclusion pour l’en-tête Python.h. Cela peut être fait avec le drapeau -I:

gcc -c -I/usr/include/python2.7 fichier source.c

Cependant, il existe un meilleur moyen: utilisez pkg-config Install pkg-config :

pkg-config --cflags python

Cela générera les indicateurs qui doivent être passés à GCC afin de compiler les applications qui utilisent les en-têtes et les bibliothèques Python.

Lors de la liaison, utilisez le résultat de cette commande pour inclure les bibliothèques appropriées:

pkg-config --libs python

Vous pouvez même combiner les deux étapes avec:

gcc `pkg-config --cflags --libs python` sourcefile.c
7
Nathan Osman