Python.h gefunden von find, aber nicht von GCC

12

Ich habe gerade eine einfache ausführbare C-Datei geschrieben, um zu überprüfen, ob sie Python.hfunktioniert oder nicht

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

Offensichtlich macht es nicht viel. Wenn ich jedoch versuche, es gccdamit zu kompilieren , erhalte ich einen Fehler:

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

Dann habe ich überprüft, ob das Python-Dev-Installieren Sie python-dev Paket Python.hinstalliert wurde oder nicht locate.

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

Mir ist klar, dass ich die Python.hHeader-Datei auf meinem System habe. Wie bringe ich meine ausführbare Datei zum Laufen?

user2738777
quelle
Willkommen bei askubuntu! Korrigieren Sie mich, wenn ich falsch liege, aber ich würde annehmen, dass der Compiler Python.h nicht findet, da es sich nicht in Ihrem Arbeitsverzeichnis befindet und der vollständige Pfad nicht angegeben wurde.
Elder Geek

Antworten:

18

Sie müssen Ihr Include qualifizieren

#include <python2.7/Python.h>

Oder sagen Sie gcc, wo Python.h mit dem zu finden ist

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

Sie müssen GCC den Include-Pfad für den Python.hHeader bereitstellen . Dies kann mit der -IFlagge erfolgen:

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

Es gibt jedoch einen besseren Weg: Verwenden Sie pkg-configInstallieren Sie pkg-config :

pkg-config --cflags python

Dadurch werden die Flags ausgegeben, die an GCC übergeben werden müssen, um Anwendungen zu kompilieren, die die Python-Header und -Bibliotheken verwenden.

Verwenden Sie beim Verknüpfen die Ausgabe dieses Befehls, um die entsprechenden Bibliotheken einzuschließen:

pkg-config --libs python

Sie können sogar beide Schritte kombinieren mit:

gcc `pkg-config --cflags --libs python` sourcefile.c
Nathan Osman
quelle
Nach "gcc -c -I ..." habe ich nur eine Datei mit der Erweiterung .o. Wie kann ich eine ausführbare Datei erhalten?
RS
@RS Sie müssen es verlinken, versuchen Sie so etwas zu tun:"gcc file.o -o program"
Nathan Osman