Python.h znaleziony przez locate, ale nie przez GCC


12

Właśnie napisałem prosty plik wykonywalny C, aby sprawdzić, czy Python.hdziała, czy nie

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

Oczywiście niewiele to robi. Jednak gdy próbuję go skompilować, pojawia gccsię błąd:

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

Następnie sprawdziłem, czy pakiet python-devZainstaluj python-dev został Python.hzainstalowany, czy go nie używa locate.

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

Jest dla mnie jasne, że mam Python.hplik nagłówka w moim systemie. Jak mogę uruchomić mój plik wykonywalny?


Witamy w askubuntu! Popraw mnie, jeśli się mylę, ale zakładam, że kompilator nie znajduje Python.h, ponieważ nie ma go w twoim katalogu roboczym i pełna ścieżka nie została określona.
Starszy Geek

Odpowiedzi:


18

Musisz zakwalifikować swoje dołączenie

#include <python2.7/Python.h>

Lub powiedz gcc, gdzie znaleźć Python.h za pomocą

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

7

Musisz podać GCC ścieżkę dołączania Python.hnagłówka. Można to zrobić za pomocą -Iflagi:

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

Jest jednak lepszy sposób: użyj pkg-configZainstaluj pkg-config :

pkg-config --cflags python

Spowoduje to wyświetlenie flag, które należy przekazać do GCC w celu skompilowania aplikacji korzystających z nagłówków i bibliotek Pythona.

Podczas łączenia użyj danych wyjściowych tego polecenia, aby uwzględnić odpowiednie biblioteki:

pkg-config --libs python

Możesz nawet połączyć oba kroki z:

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

Po „gcc -c -I ...” mam tylko plik z rozszerzeniem .o, jak mogę uzyskać plik wykonywalny?
RS

@RS Musisz to połączyć, spróbuj zrobić coś takiego:"gcc file.o -o program"
Nathan Osman

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.