Glibc
指定本地 libc 是否呼叫全域 libc?
如果我執行命令 foo 指定要使用的不同 libc,如下所示:
LD_LIBRARY_PATH=$PATH_TO_MY_CUSTOM_LIBC foo
全域定義的 libc 是否用於執行上面給出的任何命令?
為了上下文:考慮您的 libc 在您的機器上物理存在並且可以訪問,但由於某種原因不能使用的情況。給定一個登錄的 shell,為了執行一個特定的命令,你需要提供一個不同的 libc。
指定
LD_LIBRARY_PATH
內聯,會將其設置為工作 libc 的位置,而無需呼叫全域定義的。為了在本地定義新的環境變數,全域定義的 libc 會被呼叫嗎?
不,動態連結不是 libc 的一部分
/lib/libc.so.6
,它是 libc 的功能/lib/ld.so
(它們在過去幾年中都稍微更改了文件名和路徑,但本質是相同的)。是
ld.so
的,動態連結器也是一個共享庫。載入它是大多數 linux 二進製文件所做的第一件事,但在呼叫它的main()
函式之前。儘管
ld.so
它是 libc 的不同文件,但它也是 gnu libc 發行版的一部分,無論是原始碼還是編譯後的二進制形式。連結
ld.so
是從 gcc 提供的硬編碼程式碼塊到每個 linux ELF 二進製文件。它的路徑也被硬編碼到二進製文件中。你不能輕易改變它,儘管如果需要它是可能的。如果您
libc.so.6
使用替代LD_LIBRARY_PATH
設置覆蓋,此庫將用您自己的替代順序 libc,但仍將由正常的ld.so
.因此,您的問題的答案是“是的,但是……”。