2011-08-21 34 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编译..我相信,将完成这项工作。