Статическая библиотека (.lib) для проекта Python - PullRequest
7 голосов
/ 08 сентября 2010

возможно ли импортировать модули из библиотеки .lib в программу Python (так же просто, как .dll)?

Ответы [ 4 ]

3 голосов
/ 09 сентября 2010

В теории да; на практике, вероятно, нет - и, конечно, не так просто, как DLL. Статические библиотеки по сути являются просто коллекциями объектных файлов, и им нужен полный компоновщик для правильного разрешения всех ссылок на перемещение, которые они могут содержать. Может быть возможно взять вашу статическую библиотеку и просто связать ее содержимое, чтобы сформировать общую библиотеку, но для этого потребуется, чтобы статическая библиотека была построена как позиционно-независимый код (PIC), что не гарантируется. В теории нет никаких причин, по которым работа полного компоновщика по связыванию библиотеки не может быть выполнена во время выполнения, но на практике для этого нет готового кода. Ваш лучший реальный вариант - это, вероятно, отследить источник или общую версию библиотеки.

2 голосов
/ 08 сентября 2010

К сожалению, нет. Динамические библиотеки ссылок необходимы для загрузки во время выполнения.

0 голосов
/ 09 сентября 2010

У вас есть статическая библиотека или у вас есть файл .lib, и вы предполагаете, что это статическая библиотека?В Windows библиотека .lib может быть библиотекой импорта или статической библиотекой.Библиотека импорта создается вместе с dll с тем же именем (например, kernel32.dll и kernel32.lib).Он используется во время ссылки для заполнения таблицы адресов импорта исполняемого файла.Статическая библиотека содержит код, который будет скопирован в исполняемый файл во время компоновки.

Если у вас есть доступ к компилятору, другой вариант может заключаться в создании модуля расширения, который использует статическую библиотеку.Подробнее см. Документы Python

0 голосов
/ 08 сентября 2010

У вас есть доступ к исходному коду? Или хотя бы заголовочный файл? Если вы это сделаете, то вы можете создать общую библиотеку или расширение Python, которое ссылается на библиотеку. Поскольку вы упомянули библиотеки DLL, я предполагаю, что вы работаете в Windows. Этот урок может быть полезен.

...