Python.h encontrado por localizar, mas não pelo GCC


12

Acabei de escrever um simples executável C para verificar se Python.hestá funcionando ou não

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

Obviamente, isso não faz muito. No entanto, quando tento compilá- gcclo, ocorre um erro:

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

Então eu verifiquei se o pacote python-devInstale o python-dev foi Python.hinstalado ou não está sendo usado locate.

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

É claro para mim que tenho o Python.harquivo de cabeçalho no meu sistema. Como faço para que meu executável funcione?


Bem-vindo ao askubuntu! Corrija-me se eu estiver errado, mas eu assumiria que o compilador não está encontrando o Python.h porque não está no seu diretório de trabalho e o caminho completo não foi especificado.
Elder Geek

Respostas:


18

Você precisa qualificar sua inclusão

#include <python2.7/Python.h>

Ou diga ao gcc onde encontrar o Python.h com o

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

7

Você precisa fornecer ao GCC o caminho de inclusão do Python.hcabeçalho. Isso pode ser feito com a -Ibandeira:

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

No entanto, existe uma maneira melhor: use pkg-configInstale o pkg-config :

pkg-config --cflags python

Isso produzirá os sinalizadores que precisam ser passados ​​para o GCC para compilar aplicativos que usam os cabeçalhos e bibliotecas do Python.

Ao vincular, use a saída deste comando para incluir as bibliotecas apropriadas:

pkg-config --libs python

Você pode até combinar as duas etapas com:

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

Após "gcc -c -I ...", obtive apenas o arquivo com extensão .o, como posso obter um arquivo executável?
RS

@RS você precisa vinculá-lo, tente fazer algo como isto:"gcc file.o -o program"
Nathan Osman

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.