Python.h, знайдений локацією, але не GCC


12

Я щойно написав простий виконаний файл C, щоб перевірити Python.h, працює він чи ні

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

Очевидно, це не робить багато. Однак, коли я намагаюся компілювати його, gccце дає мені помилку:

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

Потім я перевірив, встановлено чи не використовується пакет python-devВстановіть python-dev . Python.hlocate

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

Мені зрозуміло, що у мене є Python.hзаголовок у моїй системі. Як змусити роботу мого виконуваного файлу?


Ласкаво просимо в askubuntu! Виправте мене, якщо я помиляюся, але я вважаю, що компілятор не знаходить Python.h, оскільки його немає у вашому робочому каталозі, а повний шлях не вказаний.
Старійшина Гік

Відповіді:


18

Вам потрібно кваліфікувати свій включений

#include <python2.7/Python.h>

Або скажіть gcc, де знайти Python.h за допомогою

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

7

Вам потрібно надати GCC шлях включення для Python.hзаголовка. Це можна зробити за допомогою -Iпрапора:

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

Однак є кращий спосіб: використовувати pkg-configВстановіть pkg-config :

pkg-config - python -cflags

Це виведе прапори, які потрібно передати GCC для компіляції програм, що використовують заголовки та бібліотеки Python.

Під час посилання використовуйте вихід цієї команди для включення відповідних бібліотек:

pkg-config --libs python

Ви навіть можете поєднати обидва етапи з:

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

Після "gcc -c -I ..." у мене є файл onlye з розширенням .o, як я можу отримати виконуваний файл?
РС

@RS Вам потрібно пов’язати це, спробуйте зробити щось подібне:"gcc file.o -o program"
Натан Осман

Будь ласка, подивіться це: askubuntu.com/questions/706471/undefined-references-with-cython
RS
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.