Сообщить об ошибке.

Функция find_library() модуля ctypes.util в Python, поиск библиотек

Поиск общих библиотек для их последующей загрузки

Синтаксис:

import ctypes.util

path = ctypes.util.find_library(name)

Параметры:

  • name - имя библиотеки без какого-либо префикса.

Возвращаемое значение:

  • путь с именем файла библиотеки.

Описание:

Функция find_library() модуля ctypes пытается найти библиотеку и вернуть ее путь.

Аргумент name - это имя библиотеки без какого-либо префикса, такого как lib, суффикса, такого как .so, .dylib, или номера версии. Это форма, используемая для опции компоновщика posix -l.

Если библиотека не найдена, то функция find_library() возвращает None. Точная функциональность зависит от системы.

При программировании на скомпилированном языке доступ к разделяемым библиотекам осуществляется при компиляции/компоновке программы и при ее запуске.

Цель функции ctypes.util.find_library() - найти библиотеку способом, аналогичным тому, как это делает компилятор или загрузчик времени выполнения (на платформах с несколькими версиями разделяемой библиотеки должна быть загружена самая последняя версия), в то время как загрузчики модуля ctypes действуют как при запуске программы и напрямую вызывают загрузчик времени выполнения.

В Linux функция ctypes.util.find_library() пытается запустить внешние программы (/sbin/ ldconfig, gcc, objdump и ld), чтобы найти файл библиотеки. Она возвращает имя файла библиотеки.

Изменено в версии 3.6: в Linux значение переменной среды LD_LIBRARY_PATH используется при поиске библиотек, если библиотека не может быть найдена другими способами.

Примеры поиска общих библиотек.

>>> from ctypes.util import find_library
>>> find_library("m")
# 'libm.so.6'
>>> find_library("c")
# 'libc.so.6'
>>> find_library("bz2")
# 'libbz2.so.1.0'
>>>

В OS X функция ctypes.util.find_library() пытается найти библиотеку по нескольким предопределенным схемам именования и путям и в случае успеха возвращает полный путь.

>>> from ctypes.util import find_library
>>> find_library("c")
# '/usr/lib/libc.dylib'
>>> find_library("m")
# '/usr/lib/libm.dylib'
>>> find_library("bz2")
# '/usr/lib/libbz2.dylib'
>>> find_library("AGL")
# '/System/Library/Frameworks/AGL.framework/AGL'
>>>

В Windows функция ctypes.util.find_library() выполняет поиск по системному пути поиска и возвращает полное имя пути, но т.к. предопределенной схемы именования нет, то такой вызов, как ctypes.util.find_library('c'), завершится ошибкой и вернет None.

Если вы оборачиваете общую библиотеку с помощью модуля ctypes, то возможно, лучше определить имя общей библиотеки во время разработки и жестко закодировать ее имя в модуле-оболочке, а не использовать поиск find_library() библиотеки во время выполнения.