Cython: динамическое связывание с DLL / так - PullRequest
2 голосов
/ 01 июля 2011

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

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

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

1 Ответ

2 голосов
/ 06 июля 2011

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

...