2016-11-19 4 views
0

OS: Ubuntu 16.04 64 bitsLibrary ne chargera avec LD_PRELOAD

Python: 2.7.12

J'ai un programme Python très simple qui est chargement juste deux bibliothèques libhidapi-hidraw et libpcProxAPI. Ce dernier dépend du premier.

from ctypes import * 

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

r = pcProxAPI.usbConnect() 

Si je cours >python myfile.py je reçois l'erreur suivante: « symbole non défini: hid_send_feature_report »

Cependant, si je cours >LD_PRELOAD=./libhidapi-hidraw.so python myfile.py je ne reçois pas de problèmes.

J'ai essayé de placer le libhidapi-hidraw.so dans /usr/lib et d'autres chemins sourcés par ldconfig sans aucune chance. Je ne suis pas sûr de ce que je fais mal, mais ça me rend fou. Toute aide serait appréciée.

EDIT

Y compris la sortie de 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: 

EDIT 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) 
+0

Et si vous dites 'LD_LIBRARY_PATH =. python myfile.py'? Est-ce que ça marche? –

+0

@JohnZwinck a essayé cette commande, pas de chance. – fortune

Répondre

1

Vérifiez si vous placez le fichier dans l'un des chemins recherchés par éditeur de liens:

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

Dans le cas contraire, vous avez quelques options:

  1. Set LD_LIBRARY_PATH dans le répertoire contenant les fichiers .so
  2. Ajoutez le répertoire /etc/ld.so.conf et lancer ldconfig - (besoin root)
+0

Sortie de cette commande dans le message d'origine. J'ai placé le fichier * .so dans '/ usr/lib' et'/usr/lib/x86_64-linux-gnu'. Toujours pas de chance. – fortune

+0

Si vous lancez ldd sur libProxy .., cela montre-t-il correctement la dépendance? Si non, l'avez-vous compilé? Vous devez lier les dépendances pour qu'il ramasse automatiquement –

+1

Si vous ne pouvez pas recompiler, ldpreload est en effet une solution de contournement –