Python ctypes не загружающий динамическую библиотеку по Mac OS X

У меня есть библиотека C++ repeater.so то, что я могу загрузить из Python в Linux следующий путь:

import numpy as np                                    
repeater = np.ctypeslib.load_library('librepeater.so', '.')

Однако, когда я компилирую ту же библиотеку по Mac OS X (Snow Leopard, 32 бита) и добираюсь repeater.dylib, и затем выполненный следующее в Python:

import numpy as np                                
repeater = np.ctypeslib.load_library('librepeater.dylib', '.')

Я получаю следующую ошибку:

OSError: dlopen(/mydir/librepeater.dylib, 6): no suitable image found.  Did find:
    /mydir/librepeater.dylib: mach-o, but wrong architecture

Я должен сделать что-то другое для загрузки динамической библиотеки в Python на Mac OS X?

6
задан nolk 14 August 2010 в 00:40
поделиться

2 ответа

Нет. Как говорится в сообщении об ошибке, существует несоответствие архитектуры между вашим питоном и файлом librepeater.dylib . Используйте файл , чтобы проверить, какова архитектура librepeater.dylib ; ваш питон будет построен с использованием одного из не перечисленных.

4
ответ дан 8 December 2019 в 15:58
поделиться

Вопрос не только в том, какие архитектуры доступны в dylib; это также вопрос, в какой архитектуре работает интерпретатор Python. Если вы используете поставляемый Apple Python 2.6.1 в OS X 10.6, по умолчанию он работает в 64-битном режиме, если это возможно. Поскольку вы говорите, что ваша библиотека была скомпилирована как 32-битная, вам нужно заставить Python работать в 32-битном режиме. Для Python, поставляемого Apple, один из способов сделать это - установить специальную переменную среды:

$ python -c "import sys; print sys.maxint"
9223372036854775807
$ export VERSIONER_PYTHON_PREFER_32_BIT=yes
$ python -c "import sys; print sys.maxint"
2147483647

Для получения дополнительной информации см. Apple man 1 python .

11
ответ дан 8 December 2019 в 15:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: