2009-05-24 102 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