2010-10-05 72 views
0

我對可執行文件運行truss命令搜索庫,並得到下面的輸出:LDD命令在某個任意位置

stat64中(「/ NET/xyzmachine /體積/工具/ solx64/studio11/SUNWspro /下的lib/RW7/librt .so.1「,0x080474A0)(睡眠...) stat64(」/ net/xyzmachine/vol/tools/solx64/studio11/SUNWspro/lib/rw7/librt.so.1「,0x080474A0)Err#2 ENOENT (睡眠...)

我經歷了構建日誌和構建主機的Envs(「/ net/xyzmachine/vol/tools/solx64/studio11/SUNWspro/lib/librt.so.1」,0x080474A0)但LD_LIB_PATH,LIBPATH,LD_RUN_PATH值不指向此位置。我無法從這個價值來自哪裏?

任何人都可以幫助我理解這一點嗎? lib搜索路徑如何決定?如何解決相同的問題?

+0

系統是Solaris x86。 – Dan 2010-10-06 11:10:26

回答

0

謝謝大家的幫助。我發現了這個問題。有人已經刪除了/ opt/studio11目錄並建立了/ net/xyzmachine/vol/tools/solx64/studio11的鏈接。所以在編譯期間它會顯示爲/ opt/studio11/....但在映射文件中它保留了「net/xyzmachine/vol/tools/solx64/studio11」的值。

再次感謝您的幫助。

1

也許這個庫是你的某些應用程序的依賴關係的依賴。 ldd以遞歸方式打印所有共享庫,即您的應用程序或其依賴項依賴於。

它在/etc/ld.so.conf(/etc/ld.so.conf.d/)或LD_LIBRARY_PATH中描述的路徑中搜索庫。

請注意,也可以在共享庫本身中設置rpath

此處瞭解詳情:Program-Library-HOWTO

+0

感謝您的回答。但我沒有在我建立它的系統中獲得這樣的文件。添加更多信息,系統是Solaris x86。 – Dan 2010-10-06 11:11:20

+0

試試'ldd -v',也許你會得到更多關於它來自哪裏的信息 – 2010-10-06 12:02:19

0

用於創建可執行文件的鏈接可能已經在執行的直接硬編碼了一些路徑。 大多數鏈接程序默認執行此操作,並允許在命令行上指定選項以添加指定的附加路徑以查找.so庫。

0

看起來您可能已將您的rpath設置爲可執行文件。嘗試:

 
chrpath /path/to/binary 

然後看看是否打印出類似於從ldd獲得的路徑。要刪除您的路徑並使用標準系統庫,請使用:

 
chrpath -d /path/to/executable 
+0

感謝您的幫助。我試過這個解決方案,但輸出是「動態部分的長度爲零。 未找到動態部分:錯誤0」 – Dan 2010-10-06 08:14:04