Windows

為什麼ldd <dynamic_lib>輸出“??? => ???”(圖書館和地點都有問號)?

  • August 15, 2019

執行ldd <dynamic_lib>時,我注意到有一些條目顯示??? => ???ldd通過搜尋引擎和本網站搜尋“Linux”、“ ”和“ ”的各種組合??? => ???都沒有找到任何結果。

可能相關:有問題的動態庫是使用內置 GCC 套件在 MSYS2 下的 Windows 10 上編譯的。

ldd命令嘗試將執行檔或庫連結到系統中的共享庫,就像您執行/使用它時發生的一樣。它將從給定文件中讀取庫引用,並嘗試在您的文件系統和路徑 ( LD_LIBRARY_PATH) 中找到它們。如果它顯示“ ???”,那麼這意味著它在您的系統中找不到某些庫(並且您檢查過的程序/庫可能無法執行/無法使用)。

當您將文件(執行檔或共享對像庫)從一個系統複製到另一個系統時,您經常會遇到庫問題。原因是不同的系統庫——即使這些只是版本不同而存在。

有時一個解決方案是也複製失去的庫,並將它們放在包含在LD_LIBRARY_PATH. 您也可以為此目的設置該變數,或者附加一個新文件夾,因為您不想將這些複製的庫文件安裝到您的系統中(!)。

ldd您可以通過在原始系統上執行來找出要複製的庫。

如果這是您自己的程序或者您自己編譯了它,您實際上可能知道缺少哪些庫。

一旦您確定了您的庫,您可以將它們複製到個人文件夾中,例如復製到~/libs. 然後將此文件夾添加到您的庫路徑中:

export LD_LIBRARY_PATH="${LD_LIBRARY_PATH}":~/libs

如果變數已經存在(通過 測試echo $LD_LIBRARY_PATH),或者

export LD_LIBRARY_PATH=~/libs

如果沒有(兩種bash風格的 shell 語法)。

然後,再試ldd一次。

稍後,您可以始終使用設置變數的 shell 腳本啟動您的實際程序,然後啟動您的程序。

引用自:https://unix.stackexchange.com/questions/535272