Python.h locate tarafından bulundu, ancak GCC tarafından bulunamadı


12

Ben sadece Python.hçalışıp çalışmadığını kontrol etmek için basit bir C yürütülebilir yazdı

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

Açıkçası, fazla bir şey yapmıyor. Bununla birlikte, bunu derlemeye çalıştığımda gccbana bir hata veriyor:

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

Sonra python-devPython-dev yükle paketinin Python.hyüklü olup olmadığını kontrol ettim locate.

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

Python.hSistemimde başlık dosyasının olduğu açık . Yürütülebilir dosyamı nasıl çalıştırabilirim?


Askubuntu hoş geldiniz! Yanılıyorsam beni düzeltin, ancak derleyicinin Python.h dosyasını bulamadığını çünkü çalışma dizininizde bulunmadığını ve tam yol belirtilmediğini varsayalım.
Elder Geek

Yanıtlar:


18

Dahil etme hakkınızı belirtmeniz gerekiyor

#include <python2.7/Python.h>

Veya gcc'ye Python.h dosyasını nerede bulacağınızı söyleyin

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

7

GCC'ye Python.hbaşlık için ekleme yolu sağlamanız gerekir . Bu -Ibayrakla yapılabilir :

gcc -c -I / usr / include / python2.7 kaynakdosyası.c

Ancak, daha iyi bir yol var: pkg-configPkg-config kur kullanın :

pkg-config --cflags python

Bu, Python üstbilgilerini ve kitaplıklarını kullanan uygulamaları derlemek için GCC'ye iletilmesi gereken bayrakları çıkarır.

Bağlarken, uygun kütüphaneleri dahil etmek için bu komutun çıktısını kullanın:

pkg-config - libts python

Her iki adımı da aşağıdakilerle birleştirebilirsiniz:

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

"Gcc -c -I ..." sonra .o uzantılı onlye dosyası aldım, yürütülebilir bir dosyayı nasıl alabilirim?
RS

@RS Bağlamanız gerekiyor, böyle bir şey yapmayı deneyin:"gcc file.o -o program"
Nathan Osman

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.