2016-11-19 76 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確實是一種解決方法 –