2011-08-21 57 views
2

我在ubuntu 10.04上工作,用cython編譯我的python代碼。 然後,我試圖將我的二進制文件(一個是numpy,一個沒有)複製到另一個支持內核的發行版中......我做的唯一不那麼酷的是我使用了附帶的python分發(2.6),並從我的Ubuntu的numpy庫複製。undefined _PyUnicodeUCS4_IsWhitespace編譯過的cython + numpy

當我執行一個沒有numpy的,它的作品。當我執行'從numpy進口...'我得到一個錯誤,如:undefined symbol: _PyUnicodeUCS4_IsWhitespace。 我認爲剛剛爲UCS4編譯的numpy與新版dist中的python版本是UCS2。但令我驚訝的是,當我執行相同的Python代碼與numpy導入 - 作爲python,而不是編譯 - 它的作品。

所以基本上我可以說,如果我打開'python'並導入numpy庫它的作品,我可以使用它們。但如果我使用編譯的版本 - 我得到UCS4錯誤.. 任何想法?

(新DIST是不是在我的控制這麼多,我真的不能只是彙編關於DIST任何我想要的)

感謝。

回答

0

好吧,它是這樣的:
當運行python解釋器並導入它試圖從libpython.so加載的numpy庫符號Python編譯(我猜是這樣)。這就是爲什麼它與解釋器一起工作。所以對這個unicode函數的請求並不是來自numpy--而是來自Python--因此它使用它編譯的UCS2函數(可能)。 但是,當運行編譯版本,並再次嘗試加載該功能 - 它無法找到它,因爲它搜索的UCS4版本..

我做了一個小檢查:grep「_PyUnicode」在libpython中,在第一個分區和第二個 - 有不同的:一個印刷的UCS4功能,和其他印刷UCS2功能..

所以這裏的「容易」的解決方案,我猜是編譯我的第一個dist UCS2版本的Python,然後設置Cython與UCS2編譯..我相信,將完成這項工作。