2017-07-10 9 views
-1

Ich versuche, ein C++ Skript zu machen, die ein paar einfache Python Code ausgeführt wird:g ++: Keine solche Datei oder das Verzeichnis

// t.cpp 
#include <Python.h> 

int main(int argc, char* argv[]) 
{ 
    Py_Initialize(); 
    PyRun_SimpleString("print('TEST PASSED')"); 
    Py_Finalize(); 

    return 0; 
} 

Nach g++ t.cpp ausgeführt wird, erhalte ich die Fehlermeldung:

t.cpp:1:20: fatal error: Python.h: No such file or directory

compilation terminated

ich habe durch die Installation python3-dev viele ähnliche Fragen, die alle spezifisch für eine IDE oder andere Entwicklungssoftware, oder gelöst wurden gefunden. Das python3-dev Paket ist bereits installiert ist, und ich auch manuell einschließlich Header, wenn andere zu kompilieren versuchen:

g++ t.cpp -I ~/.virtualenvs/MainEnv/include/python3.5m/Python.h 
g++ t.cpp -I /usr/include/python3.5m/Python.h 

Weder nichts ändert.

Wie kann ich diesen Fehler beheben?

UPDATE: Ich fand, dass g++ t.cpp -I /usr/include/python3.5/ mit dem Header zu enthalten scheint, aber dann läuft es mehr Fehler in:

t.cpp:(.text+0x10): undefined reference to `Py_Initialize'

t.cpp:(.text+0x1f): undefined reference to `PyRun_SimpleStringFlags'

t.cpp:(.text+0x24): undefined reference to `Py_Finalize'

collect2: error: ld returned 1 exit status

Antwort

1

Ich habe ein ähnliches Beispiel on my github

g++ t.cpp fehlen ein paar Dinge ein:

  • Sagen g ++, wo die Header für CPython sind (von -I/path/to/headers/)
  • Sagen g ++ zu Link gegen libpython (von -lpython3.5m)

Sie können auch diese Fahnen mit pkg-config

$ pkg-config python-3.5 --libs --cflags 
-I/usr/include/python3.5m -I/usr/include/x86_64-linux-gnu/python3.5m -lpython3.5m 

Ihre Kommandozeile abrufen sollte so aussehen wie g++ -I/usr/include/python3.5m t.cpp -lpython3.5m

+0

Ich erwähnte unter "UPDATE", dass das Hinzufügen der "-I" -Flagge die Header korrekt aufzunehmen schien, aber in mehr Fehler geriet. '-lpython3.5' und' -lpython3' return'/usr/bin/ld: -lpython3 (.5) ' – Nelson

+0

kann nicht gefunden werden Ah, auf ubuntu ist es' -lpython3.5m' –

+0

Natürlich war ich 1 Buchstabe aus. Vielen Dank, es funktioniert jetzt perfekt! – Nelson

0

#include <...> ist, dass mit dem Compiler kommen enthält.
Verwenden Sie #include "Python.h" für andere umfasst.

+0

Beide spitzen Klammern und Anführungszeichen 'Python.h' den gleichen Fehler produziert. – Nelson

+0

Der C++ - Standard ist sehr vage über die Bedeutungen von '<...>' und '" ... "'. –

Verwandte Themen