Python.h trouvé par Locate mais pas par GCC


12

Je viens d'écrire un simple exécutable C pour vérifier si ça Python.hmarche ou pas

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

De toute évidence, cela ne fait pas grand-chose. Cependant, lorsque j'essaie de le compiler avec, gcccela me donne une erreur:

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

Ensuite, j'ai vérifié si le paquet python-devInstallez python-dev était Python.hinstallé ou non locate.

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

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


Bienvenue sur askubuntu! Corrigez-moi si je me trompe, mais je suppose que le compilateur ne trouve pas Python.h car il n'est pas dans votre répertoire de travail et le chemin complet n'a pas été spécifié.
Elder Geek

Réponses:


18

Vous devez qualifier votre inclusion

#include <python2.7/Python.h>

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

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

7

Vous devez fournir à GCC le chemin d'inclusion de l'en- Python.htête. Cela peut être fait avec le -Idrapeau:

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

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

pkg-config --cflags python

Cela produira les drapeaux 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 la sortie 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

Après "gcc -c -I ...", j'ai un fichier unique avec l'extension .o, comment puis-je obtenir un fichier exécutable?
RS

@RS Vous devez le lier, essayez de faire quelque chose comme ceci:"gcc file.o -o program"
Nathan Osman

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.