Python.h được tìm thấy bởi định vị nhưng không phải bởi GCC


12

Tôi chỉ viết một C thực thi đơn giản để kiểm tra xem Python.hcó hoạt động hay không

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

Rõ ràng, nó không làm được gì nhiều. Tuy nhiên, khi tôi cố gắng biên dịch nó với gccnó sẽ báo lỗi:

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

Sau đó, tôi đã kiểm tra xem gói python-devCài đặt python-dev đã Python.hđược cài đặt hay chưa sử dụng locate.

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

Rõ ràng với tôi rằng tôi có Python.htệp tiêu đề trên hệ thống của mình. Làm thế nào để tôi có thể thực thi công việc của tôi?


Chào mừng bạn đến với Askubfox! Sửa lỗi cho tôi nếu tôi sai, nhưng tôi cho rằng trình biên dịch không tìm thấy Python.h vì nó không có trong thư mục làm việc của bạn và đường dẫn đầy đủ chưa được chỉ định.
Anh Cả Geek

Câu trả lời:


18

Bạn cần đủ điều kiện bao gồm

#include <python2.7/Python.h>

Hoặc nói với gcc nơi tìm Python.h với

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

7

Bạn cần cung cấp cho GCC đường dẫn bao gồm cho Python.htiêu đề. Điều này có thể được thực hiện với -Icờ:

gcc -c -I / usr / bao gồm / python2.7 sourcefile.c

Tuy nhiên, có một cách tốt hơn: sử dụng pkg-configCài đặt pkg-config :

pkg-config - trăn trăn

Điều này sẽ xuất ra các cờ cần được chuyển đến GCC để biên dịch các ứng dụng sử dụng các tiêu đề và thư viện Python.

Khi liên kết, sử dụng đầu ra của lệnh này để bao gồm các thư viện thích hợp:

pkg-config - con trăn

Bạn thậm chí có thể kết hợp cả hai bước với:

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

Sau "gcc -c -I ..." Tôi đã có tệp chỉ có phần mở rộng .o, làm cách nào tôi có thể nhận được tệp thực thi?
RS

@RS Bạn cần liên kết nó, hãy thử làm một cái gì đó như thế này:"gcc file.o -o program"
Nathan Osman

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.