Windows為什麼
為什麼ldd <dynamic_lib>
輸出“??? => ???”(圖書館和地點都有問號)?
執行
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 腳本啟動您的實際程序,然後啟動您的程序。