LINUX.ORG.RU

Не могу подгрузить динамическую библиотеку с помощью сtypes в скрипте

 , , ,


0

2

Первый раз попробовал использовать ctypes. В результате запуска примера ниже получаю ошибку о том, что данного файла нет. Хотя скрипт на Python и динамическая библиотека lib.so находятся в одной директории.

Код:

import os.path
from ctypes import *

parentdir = os.path.abspath(os.path.dirname(__file__))
path_to_lib = os.path.join(parentdir, "lib.so") 

# Файл есть
print 'Does path exist? :' + str(os.path.exists(path_to_lib))
lib = cdll.LoadLibrary(path_to_lib)

Ошибка:

Does path exist? :True
Traceback (most recent call last):
  File "test_ctypes.py", line 6, in <module>
    mydll = cdll.LoadLibrary('lib.so')
  File "/usr/lib/python2.7/ctypes/__init__.py", line 443, in LoadLibrary
    return self._dlltype(name)
  File "/usr/lib/python2.7/ctypes/__init__.py", line 365, in __init__
    self._handle = _dlopen(self._name, mode)
OSError: lib.so: cannot open shared object file: No such file or directory

В чем моя ошибка? Подскажите, что я делаю не так. Спасибо

★★★

Последнее исправление: amazpyel (всего исправлений: 4)

Можно выставить пистону LD_LIBRARY_PATH. Или попробовать конструктор ctypes.CDLL напрямую с абсолютным путем.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)

В чем моя ошибка?

Сначала попробуй ldd - твоя либа может зависеть от другой, и эта другая не находится.

tailgunner ★★★★★
()
Ответ на: комментарий от amazpyel

Странно. ЕМНИП, такое говориться о бинарях, у которых нет _внешних_ динамических связей - тогда это ничего не объясняет.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.