Библиотека будет загружаться только с LD_PRELOAD

ОС: Ubuntu 16.04, 64-битная

Python: 2.7.12

У меня действительно простая программа на Python, которая просто загружает две библиотеки libhidapi-hidraw а также libpcProxAPI, Последнее зависит от первого.

from ctypes import *

hidapi = CDLL('/home/wsharp/Source/pyprox/libhidapi-hidraw.so')
pcProxAPI = CDLL('/home/wsharp/Source/pyprox/libpcProxAPI.so')

r = pcProxAPI.usbConnect()

Если я бегу >python myfile.py Я получаю следующую ошибку: "неопределенный символ: hid_send_feature_report"

Однако, если я бегу >LD_PRELOAD=./libhidapi-hidraw.so python myfile.py Я не получаю никаких проблем.

Я пытался разместить libhidapi-hidraw.so в /usr/lib и другие пути, полученные ldconfig без удачи Я не уверен, что я делаю неправильно, но это сводит меня с ума. Любая помощь будет оценена.

РЕДАКТИРОВАТЬ

Включая вывод sudo ldconfig -v 2>/dev/null | grep -v ^$'\t'

sudo ldconfig -v 2>/dev/null | grep -v ^$'\t'
/usr/lib/x86_64-linux-gnu/libfakeroot:
/lib/i386-linux-gnu:
/usr/lib/i386-linux-gnu:
/usr/local/lib:
/lib/x86_64-linux-gnu:
/usr/lib/x86_64-linux-gnu:
/usr/lib/x86_64-linux-gnu/mesa-egl:
/usr/lib/x86_64-linux-gnu/mesa:
/lib:
/usr/lib:

РЕДАКТИРОВАТЬ 2

ldd libpcProxAPI.so
    linux-vdso.so.1 =>  (0x00007fff9d3b9000)
    libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f276c231000)
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f276bf28000)
    libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f276bd11000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f276b948000)
    /lib64/ld-linux-x86-64.so.2 (0x000055dfcf780000)

1 ответ

Решение

Убедитесь, что вы помещаете файл в один из путей, найденных компоновщиком:

ldconfig -v 2>/dev/null | grep -v ^$'\t'

Если это не так, у вас есть несколько вариантов:

  1. Установите LD_LIBRARY_PATH в каталог, содержащий файлы.so
  2. Добавьте каталог в /etc/ld.so.conf и запустите ldconfig - (нужен root)
Другие вопросы по тегам