列出程式中未定義需要外部提供的 symbol
nm -Du 列出程式中未定義需要外部提供的 symbol,就是除了你自己寫的變數、函式等以外,從include來的那些lib裡定義的。
列出需要的 shared library
ldd /bin/ls
或
objdump -p /bin/ls
執行中的 process,查看 /proc/PID/maps 得知目前用到的 shared library
man proc 可得知 /proc/PID/maps 更多資訊,像是如何得知 PID 目前自己使用到的 memory 數量 (private memory)。
若 shared library 名稱內有 “/”,表示它是路徑,直接用這個路徑找。
若 executable 內有定義 DT_RPATH 沒定義 DT_RUNPATH,從 DT_RPATH 列的目錄裡找。
從 LD_LIBRARY_PATH 列的目錄裡找。
從 DT_RUNPATH 列的目錄裡找。
從 ldconfig 產生的 cache 內找 (/etc/ld.so.cache)。
從 OS 的預設位置找: 先找 /lib 再找 /usr/lib。
用 LD_DEBUG=libs 可以看找的過程
$ LD_DEBUG=libs out/Debug/chrome
當執行ldd -d <file>時,有時會發像某些lib not found。這是因為shared library 直到運行時才會被解析。 為了讓 ldd 指令能找到它們,要將 library 的路徑添加到 LD_LIBRARY_PATH 環境變數,然後 ldd 就能夠找到該library。
沒有留言:
張貼留言