undefined _PyUnicodeUCS4_IsWhitespace в скомпилированном cython + numpy - PullRequest
2 голосов
/ 21 августа 2011

Я работаю в Ubuntu 10.04 и использовал Cython для компиляции своего кода на Python.Затем я попытался скопировать 2 моих бинарных файла (один с numpy, а другой без) в другой дистрибутив с поддерживаемым ядром и т. д. Единственное, что я сделал, что не так круто, это то, что я использовал Python, который поставляется с этим дистрибутивом.(2.6), и скопируйте из моего Ubuntu библиотеки numpy.

, когда я запускаю библиотеку без numpy, она работает.когда я выполняю тот с 'from numpy import ...', я получаю ошибку как: undefined symbol: _PyUnicodeUCS4_IsWhitespace.Я думал, что Numpy только что скомпилирован для UCS4, где в качестве версии Python в новом дистрибутиве является UCS2.но к моему удивлению, когда я выполняю тот же код Python с numpy import - как python, а не скомпилированный - он работает.

, поэтому я могу сказать, что если я открою 'python' и импортирую numpy библиотеки, он будет работатьи я могу их использовать.но если я использую скомпилированную версию - я получаю эту ошибку UCS4 ... какие-нибудь идеи?

(новый dist не так уж и подвластен моему контролю, и я не могу просто скомпилировать что-либо, что я хочу на этомdist)

Спасибо.

1 Ответ

0 голосов
/ 23 августа 2011

ну, это выглядит так:
когда запускается интерпретатор python и импортирует библиотеку numpy, которую пытается загрузить из libpython.so символ Python скомпилирован (я так думаю).Вот почему он работает с переводчиком.таким образом, запрос на эту функцию Unicode приходит не от numpy, а от Python, поэтому он использует функции UCS2, с которыми он скомпилирован (возможно).но при запуске скомпилированной версии и снова он пытается загрузить эту функцию - он не может найти ее, потому что ищет версию UCS4 ..

я сделал небольшую проверку: grep "_PyUnicode" в libpython, в первом dist, а во втором - и там было другое: один печатал функции UCS4, а другой печатал функции UCS2 ..

так что «простое» решение здесь, я думаю, состоит в том, чтобы скомпилировать на моемсначала дистрибутив Python для UCS2, а затем настройку Cython для компиляции с UCS2 .. я верю, что это сделает работу.

...