2010-11-17 47 views
1

是否可以指定共享庫的相對路徑,當我做岩心分析(我想在編譯的時候,而不是調試的時間指定相對路徑)相對路徑時,分析核心轉儲

(gdb) info sharedlibrary 
From    To     Syms Read Shared Object Library 
0x00007f4433ffef00 0x00007f443402cc08 Yes (*)  /lib/libssl.so.0.9.8 
0x00007f44334d6a00 0x00007f44335e9920 Yes   /lib/libc.so.6 
0x00007f443423eaf0 0x00007f4434257994 Yes   /lib64/ld-linux-x86-64.so.2 
             No   ./lib/myplugin.so 
             No   /opt/lib/mylibc.so 
0x00007f443237a190 0x00007f443237d7f8 Yes   /lib/librt.so.1 
0x00007f44320f8ef0 0x00007f44321392d8 Yes   /lib/libm.so.6 
0x00007f4431ee08b0 0x00007f4431eeffe8 Yes (*)  /lib/libgcc_s.so.1 

我將更具體地說明什麼和爲什麼不適用於我:

  1. LD_LIBRARY_PATH可以指定相對於當前工作目錄的相對路徑。這不符合我的需要,因爲我需要相對於可執行文件位置的相對路徑
  2. 帶有$ ORIGIN的RPATH旨在成爲可執行文件位置的相對路徑。但它不符合我的需求,因爲當我嘗試進行核心分析時,它擴展到絕對路徑。

那麼我怎樣才能指定共享庫相對於可執行文件的位置的相對路徑呢?

回答

0

通常,共享庫路徑在鏈接期間並不重要(除非您使用的是rpath,它保留共享庫本身的庫路徑)。

當程序運行或調試時,在shell變量LD_LIBRARY_PATH/etc/ld.so.conf/etc/ld.so.conf.d/)中設置的路徑中搜索共享庫。 LD_LIBRARY_PATH的優先級高於ld.so.conf

出口LD_LIBRARY_PATH = .. /路徑/要/我的/ LIB1:/路徑

這是沒有問題的使用相對路徑,它也能發揮作用

Program Library HOWTO

+0

但是,這是尊重而不是在對於當前工作目錄的相對路徑到可執行文件的位置,這需要庫。 -Wl,-R $ ORIGIN /../ lib的問題是它無論如何擴展到絕對路徑。但是這個相對路徑至少是關於可執行位置的。 – 2010-11-18 21:32:54