2016-11-19 367 views
0

OS:的Ubuntu 16.04 64位图书馆将只与LD_PRELOAD加载

的Python: 2.7.12

我有一个非常简单的Python程序这是刚刚加载两个库libhidapi-hidrawlibpcProxAPI。后者依赖于前者。

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来源的其他路径,但没有运气。我不知道我在做什么错,但是这让我感到非常紧张。任何帮助,将不胜感激。

EDIT

包含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) 
+0

如果你说'LD_LIBRARY_PATH =。 python myfile.py'?那样有用吗? –

+0

@JohnZwinck试过这个命令,没有运气。 – fortune

回答

1

确认如果要放置在该文件中通过接头搜索到的路径中的一个的输出:

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

如果没有,你有几种选择:

  1. 设置LD_LIBRARY_PATH到该目录包含.so文件
  2. 添加目录加入/etc/ld.so.conf并运行ldconfig - (需要root)
+0

在原始文章中输出该命令。我将* .so文件放在'/ usr/lib'和'/ usr/lib/x86_64-linux-gnu'中。仍然没有运气。 – fortune

+0

如果您在libProxy上运行ldd,它是否正确显示依赖关系?如果没有,你编译它?你必须链接它的依赖关系才能自动提取 –

+1

如果你不能重新编译,ldpreload确实是一种解决方法 –