2009-05-24 2 views
2

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

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

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

ответ

5

Со многими пакетами Open Source, вы можете установить:

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

Это сделало трюк для меня. Я попытался установить CFLAGS, и это не сработало, это должно быть CPPFLAGS. И для меня LDFLAGS не было необходимо, поскольку libncurses находится на моем LD_LIBRARY_PATH в порядке. Спасибо! – Mojo

0

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

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

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

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

Если вы не планируете устанавливать альтернативный проклинает библиотеку, это совершенно безопасно помещать заголовки Ncurses в верхнем уровне, включает путь, и этот подход следует Gentoo.

+1

Существуют различия во всех заголовках, например 'sizeof (WINDOW)' при сравнении ncurses/ncursesw. И, конечно, ncurses5/ncurses6 использует разные битмаски для мыши. –

+0

@ThomasDickey Я просто оценивал совместимость, а не личность. По-видимому, на странице руководства указано, что заголовки совместимы с исходным кодом. Несмотря на это, я лишился ответа на эту информацию, поскольку она не является частью вопроса. – farsil

Смежные вопросы