编译Python时出现curses.h未找到的错误

4
我正在尝试在我的Linux系统上从源代码构建Python 2.6.2。它已经安装了ncurses在/usr/local/,而curses.h位于/usr/local/include/ncurses。所以在包含路径中找不到curses.h,并导致Python构建失败。
那么,这个问题应该如何解决呢?Python是否应该包括?/usr/local/include/ncurses是否应该在包含路径中?ncurses目录中的文件是否应该链接到/usr/local/include中?
还是说有更简单的解决方案吗?
2个回答

8

许多开源软件包都支持以下设置:

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

甚至更多:
export CPPFLAGS="-I/usr/local/include/ncurses"

在运行configure脚本之前。我最近没有编译过Python,所以不能确定它是否有效,但它可能有效 - 我已经在/usr/gnu下安装了ncurses(因为/usr/local/是自动挂载的并且包含古董),我不记得需要使用任何特殊的东西来使其工作。


再次确认...

configure脚本只包括。我必须使用:

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

为了让Python(2.5)配置接受curses。您需要将'gnu'替换为您的配置中的'local'。

这对我很有帮助。我尝试设置了CFLAGS,但没有起作用,需要设置CPPFLAGS。而对于我来说,LDFLAGS是不必要的,因为libncurses可以在我的LD_LIBRARY_PATH上找到。谢谢! - Mojo
对于Python 3.7,包括.../include.../include/ncurses确实是解决问题的方法。 - jmd_dk

0

我知道这是一个非常古老的问题,但当我从源代码编译Python 3.6.0时,这个问题仍然发生了,所以我认为它仍然相关。

最近版本的ncurses有几种不同的风味:普通、宽字符支持、线程化。为了让程序员保留和使用不同的风味,除了给库命名不同(ncursesw.soncursest.so等),ncurses配置脚本还默认将头文件放在子目录中。这也允许在ncurses旁边拥有不同的curses实现,如man page中所述。

然而,一些程序仍然假定,以及所有其他ncurses头文件,都放置在顶级包含搜索路径中,并且不会查看子目录。在许多Linux发行版中,通常有一些解决ncurses开发包问题的解决方法,但如果您正在从源代码编译ncurses,则有两种可能的方法来解决此问题:

  1. 使用CPPFLAGS或等效选项,如所接受的答案建议的那样。它可以工作,但您必须每次设置适当的编译标志。
  2. 使用--enable-overwrite配置ncurses。这将根据您的--prefix在顶级包含目录中安装ncurses头文件。

如果您不打算安装替代curses库,则将ncurses头文件放在顶级包含路径中是完全安全的,这是Gentoo采用的方法。


1
在比较ncurses/ncursesw时,头文件之间存在差异,例如sizeof(WINDOW)。当然,ncurses5/ncurses6对于鼠标使用不同的位掩码。 - Thomas Dickey
@ThomasDickey 我只是在评估兼容性,而不是身份。显然,手册说明头文件是源代码兼容的。无论如何,我已经从我的答案中剥离了这些信息,因为它不是问题的一部分。 - farsil

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接