2009-05-24 104 views
2

我试图在Linux系统上从源代码构建Python 2.6.2。它具有安装在/ usr/local /上的ncurses,而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

随着许多开源软件包,您可以设置:

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

甚至:

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

运行配置脚本之前。我最近没有足够编译Python以确保它能正常工作,但它可能会发生 - 我在/ usr/gnu下安装了ncurses(因为/ 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)配置接受curses。您的配置将替换为'gnu'和'local'。

+0

这为我做了诡计。我尝试设置CFLAGS,但没有奏效,它需要成为CPPFLAGS。对我来说,LDFLAGS不是必需的,因为在我的LD_LIBRARY_PATH上找到了libncurses。谢谢! – Mojo 2009-05-24 01:56:22

0

我知道这是一个非常古老的问题,但是从源码编译python 3.6.0时我仍然遇到这个问题,所以我想它仍然是相关的。

最近的ncurses版本有几种风格:普通,宽字符支持,线程化。为了让程序员保留和使用不同的风格,除了命名库的不同之处(ncursesw.so,ncursest.so等),ncurses configure脚本默认设置makefile以将头文件置于子目录中。这也允许与ncurses一起实现不同的curses实现,如man page中指定的那样。

但是,有些程序仍然认为curses.h沿着所有其他ncurses头文件放置在顶层包含搜索路径中,并且不会查看子目录。在许多Linux发行版通常有某种形式的解决方法在ncurses的研究与开发包的问题,​​但如果你是从源代码编译的ncurses,有解决问题的两种可能的方法:

  1. 使用CPPFLAGS或同等学历,如接受的答案表明。它的工作原理,但你必须每次都设置适当的编译标志。
  2. 使用--enable-overwrite配置ncurses。根据您的--prefix,这会将ncurses头文件安装在顶层include目录中。

如果您不打算安装替代curses库,那么将ncurses头文件放在最高级别包含路径中是完全安全的,并且这是Gentoo之后的方法。

+1

在比较ncurses/ncursesw时,标题之间存在差异,例如`sizeof(WINDOW)`。当然,ncurses5/ncurses6为鼠标使用不同的位掩码。 – 2017-03-17 08:54:16