我正在試圖在Ubuntu Linux上構建和使用共享庫的this page和this page中的解釋如下。使用共享庫的問題
我正在使用PC上的交叉編譯器構建庫和應用程序,而不是將文件複製到目標系統並在那裏運行。
最後,我處於正確定義所有符號鏈接的階段,我能夠運行應用程序 - 但不是以所需的形式。
比方說,我有一個共享庫libtest.so.1.0
在目錄/home/ysap/libs
。然後,我在同一個目錄中創建了符號鏈接libtest.so.1
和libtest.so
,它們都指向庫文件。我的應用程序app.e
使用test
庫。
現在,運行應用程序,我可以輸入:
> LD_LIBRARY_PATH=/home/ysap/libs ./app.e
和應用很好地運行。不過,我想消除分配,所以我嘗試打字:
> export LD_LIBRARY_PATH=/home/ysap/libs
> ./app.e
但不幸的是我得到一個錯誤信息,說:
./app.e: error while loading shared libraries: libtest.so.1: cannot open shared object file: No such file or directory
我也試過打字:
> ldconfig -n /home/ysap/libs
and
> sudo ldconfig -n /home/ysap/libs
但它沒有幫助。
我在做什麼錯?我怎樣才能使app.e運行W/O變量賦值?
更新1:
應用程序使用mmap()
調用,因此它必須與須藤特權運行。實際調用行是:
> sudo LD_LIBRARY_PATH=/home/ysap/libs ./app.e
是否有可能在export
-ed變量沒有更新須藤環境?
更新2:
輸出的ldd ./app.e
:從用戶指定的路徑
libtest.so.1 => /home/ysap/libs/libtest.so.1 (0xb6faa000)
libgcc_s.so.1 => /lib/arm-linux-gnueabi/libgcc_s.so.1 (0xb6f85000)
libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6ea4000)
/lib/ld-linux.so.3 (0xb6fb7000)
什麼的ouptup被動態加載:LDD ./app.e? – coelhudo
@ coelhudo - 請參閱問題中的更新2。 – ysap