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-DevPython.h или не используется locate.

$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 --cflags python

Это выведет флаги, которые должны быть переданы в GCC для компиляции приложений, которые используют заголовки и библиотеки Python.

При связывании используйте выходные данные этой команды, чтобы включить соответствующие библиотеки:

pkg-config --libs python

Вы можете даже объединить оба шага с:

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

После "gcc -c -I ..." у меня есть единственный файл с расширением .o, как я могу получить исполняемый файл?
RS

@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.