Компиляция Python, curses.h не найден - PullRequest
4 голосов
/ 24 мая 2009

Я пытаюсь собрать Python 2.6.2 из исходного кода в моей системе Linux. Он имеет ncurses, установленный в / usr / local /, и curses.h находится в / usr / local / include / ncurses. Таким образом, curses.h не найден в пути включения, и эти пакеты не работают в сборке Python.

Какое правильное решение для этого? Предполагается, что Python включает в себя ? Должен ли / usr / local / include / ncurses находиться в пути включения? Должна ли быть ссылка из файлов в каталоге ncurses на / usr / local / include?

Или есть какое-то более простое решение?

Ответы [ 2 ]

8 голосов
/ 24 мая 2009

Со многими пакетами с открытым исходным кодом вы можете установить:

export CPPFLAGS="-I/usr/local/include"

или даже:

export CPPFLAGS="-I/usr/local/include/ncurses"

перед запуском скрипта настройки. Я не скомпилировал Python в последнее время достаточно, чтобы быть уверенным, что он работает, но, вероятно, он работает - у меня есть ncurses, установленные в / usr / gnu (потому что / usr / local / является автомонтированным и содержит антиквариат), и я не помню, чтобы используйте что-нибудь особенное, чтобы заставить его работать.


Дважды проверено ...

Сценарий конфигурирования включает только <curses.h>. Я должен был использовать:

export CPPFLAGS="-I/usr/gnu/include -I/usr/gnu/include/ncurses"
export LDFLAGS="-L/usr/gnu/lib"
./configure

Чтобы настроить Python (2.5) на прием проклятий. Вы бы заменили 'gnu' на 'local' для вашей конфигурации.

0 голосов
/ 16 марта 2017

Я знаю, что это очень старый вопрос, но проблема все еще возникала у меня при компиляции Python 3.6.0 из исходного кода, поэтому я думаю, что он все еще актуален.

Последние версии ncurses доступны в нескольких вариантах: обычный, поддержка широких символов, многопоточный. Чтобы позволить программистам сохранять и использовать разные варианты, помимо именования библиотек по-разному (ncursesw.so, ncursest.so и т. Д.), Скрипт конфигурации ncurses настраивает make-файл для помещения заголовочных файлов в подкаталоги по умолчанию. Это также позволяет иметь различные реализации curses наряду с ncurses, как указано в справочной странице .

Некоторые программы, тем не менее, все еще предполагают, что curses.h, наряду со всеми другими заголовками ncurses, размещены на верхнем уровне, включают пути поиска и не будут искать подкаталоги. Во многих дистрибутивах Linux обычно есть какой-то обходной путь для проблемы в пакетах разработки ncurses, но если вы компилируете ncurses из исходного кода, есть два возможных подхода для решения проблемы:

  1. Использование CPPFLAGS или эквивалентного, как предполагает принятый ответ. Это работает, но вы должны каждый раз устанавливать соответствующие флаги компиляции.
  2. Настройка ncurses с помощью --enable-overwrite. Это установит заголовочные файлы ncurses в каталог include верхнего уровня, в соответствии с вашим --prefix.

Если вы не планируете устанавливать библиотеку альтернативных проклятий, совершенно безопасно поместить заголовки ncurses в верхний уровень include path, и этот подход следует за Gentoo .

...