引言
有時候,當執行一些 Linux 程序時,系統會回報一個莫名其妙的錯誤:
-bash: ./executableABC: No such file or directory
遇到這個情況,大部分人都會想:
明明我的程序就在,為什麼系統會找不到它呢 ?
其實,它找不到的不是程序本身,而是它需要的 dependencies。
所以,這個時候,使用 ldd 找出所有需要的 dynamic libraries,就是其中一個最常見的除錯方法。
---
方法
使用方法十分簡單,只需要 ldd "executable name" 即可。
例子:
ldd executableABC
./executableABC: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by ./executableABC)
./executableABC: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by ./executableABC)
./executableABC: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by ./executableABC)
linux-vdso.so.1 (0x00007ffdd8146000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fdda6ca6000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fdda6ca0000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fdda6c95000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdda6a7b000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fdda692c000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007fdda6911000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fdda671d000)
ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fdda6cd3000)
由以上的訊息可見,程序需要 libc.so.6 以及其他 dependencies,
查找後發現,系統並沒有把它們成功安裝好。
故此,只需把所有 dependencies 都用 apt / 其他 package manager 安裝好,
程序就可以成功運行。
No comments:
Post a Comment