Cython: динамическое связывание с dll/так

Я работаю с API, который распространяется как файл dll/so, который мне нужно динамически связать с моей программой python. Для этого я хочу использовать Cython.

Раньше мне удавалось статически связываться с dll. Это работает хорошо, за исключением того, что API поставляется в четырех разных вариантах, и теоретически их будет бесконечно больше, и пользователи должны иметь возможность компилировать их с любым именем, которое они хотят (что-то вроде системы плагинов). Из-за этого я не могу просто создать файл so/pxd, который статически связывается только с одной библиотекой или даже с некоторыми из них.

Что мне нужно, так это иметь возможность передать имя so/dll в код Cython и заставить его «импортировать» его. Я знаю, что это можно сделать с помощью ctypes через ctypes.cdll.LoadLibrary, но возможно ли это в Cython? Мне придется использовать ctypes для этого?


person Josiah    schedule 01.07.2011    source источник


Ответы (1)


Я предполагаю, что вы говорите о написании модулей C здесь. Если да, то можете. Я не знаю, что такое эквивалент в Windows, но в Linux вы можете использовать dlopen и друзей. Для него есть справочная страница и несколько веб-сайтов, документирующих его. Попробуйте эту ссылку "http://linux.die.net/man/3/dlopen", она предоставляет вам хороший пример в нижней части страницы. Это делает то же самое, что и ctypes, на самом деле я думаю, что это может быть даже то, что использует ctypes.

person James Hurford    schedule 06.07.2011