Python.h ditemukan dengan temukan tetapi tidak oleh GCC


12

Saya baru saja menulis executable C sederhana untuk memeriksa apakah Python.hberfungsi atau tidak

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

Jelas, itu tidak berbuat banyak. Namun, ketika saya mencoba mengkompilasinya dengan gccitu memberi saya kesalahan:

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

Kemudian saya memeriksa untuk melihat apakah paket python-devInstal python-dev telah Python.hdiinstal atau tidak digunakan locate.

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

Jelas bagi saya bahwa saya memiliki Python.hfile header di sistem saya. Bagaimana cara saya menjalankan executable saya?


Selamat datang di askubuntu! Perbaiki saya jika saya salah, tetapi saya akan menganggap bahwa kompiler tidak menemukan Python.h karena itu tidak ada di direktori kerja Anda dan path lengkap belum ditentukan.
Penatua Geek

Jawaban:


18

Anda harus memenuhi syarat untuk menyertakan Anda

#include <python2.7/Python.h>

Atau beri tahu gcc di mana menemukan Python.h dengan

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

7

Anda perlu memberikan GCC dengan jalur sertakan untuk Python.htajuk. Ini dapat dilakukan dengan -Iflag:

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

Namun, ada cara yang lebih baik: gunakan pkg-configInstal pkg-config :

pkg-config --cflags python

Ini akan menampilkan flag yang perlu diteruskan ke GCC untuk mengkompilasi aplikasi yang menggunakan header dan pustaka Python.

Saat menautkan, gunakan output dari perintah ini untuk memasukkan pustaka yang sesuai:

pkg-config --libs python

Anda bahkan dapat menggabungkan kedua langkah dengan:

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

Setelah "gcc -c -I ..." Saya punya file onlye dengan ekstensi .o, bagaimana saya bisa mendapatkan file yang dapat dieksekusi?
RS

@RS Anda harus menautkannya, coba lakukan sesuatu seperti ini:"gcc file.o -o program"
Nathan Osman

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.