linux - 为什么我编译的 C++ 二进制文件不执行?

标签 linux ubuntu

所以我刚刚编译了我的代码,当我尝试执行我得到的二进制文件时

-bash: ./a.out: No such file or directory

当我执行 ldd a.out 时,我看到我需要的一切都在那里

ldd a.out
   linux-vdso.so.1 (0x00007ffd337fb000)
   libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f1200930000)
   librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f1200728000)
   libncurses.so.5 => /lib/x86_64-linux-gnu/libncurses.so.5 (0x00007f1200505000)
   libtinfo.so.5 => /lib/x86_64-linux-gnu/libtinfo.so.5 (0x00007f12002db000)
   libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f12000d7000)
   libcap.so.2 => /lib/x86_64-linux-gnu/libcap.so.2 (0x00007f11ffed1000)
   libnsl.so.1 => /lib/x86_64-linux-gnu/libnsl.so.1 (0x00007f11ffcb7000)
   libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f11ff919000)
   libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f11ff6fa000)
   libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f11ff309000)
   /usr/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007f1200b4d000)

同时执行 ls -la 显示文件本身

lrwxrwxrwx 1 user user    33 Jul 18 21:26 a.out

有没有人知道为什么这不起作用?

我正在使用 Ubuntu 18.04.2 LTS。

最佳答案

When I do ldd a.out I see everything is there that I need

不,没有。

ldd 已更改为运行已知的 ELF 解释器/动态链接器,而不是二进制文件头中的那个。您可以自己检查一下——ldd 是您系统上的一个 shell 脚本。

ldd a.out
...
/usr/lib/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2

这就是证据。你的系统上有 /usr/lib/ld-linux-x86-64.so.2 吗?

一个更简单的测试用例:

$ echo 'int main(){}' | cc -xc -
$ ./a.out
$ perl -pe 's/ld-linux/ld-LOOOL/' -i ./a.out
$ ./a.out
bash: ./a.out: No such file or directory
$ ldd ./a.out
        linux-vdso.so.1 (0x00007ffd707e9000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fe936d52000)
        /lib64/ld-LOOOL-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x00007fe9372f3000)

作为快速修复,您可以在编译程序时将路径传递给现有的解释器

cc -Wl,-dynamic-linker,/lib64/ld-linux-x86-64.so.2 ...

关于linux - 为什么我编译的 C++ 二进制文件不执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57104635/

相关文章:

linux - 指向头文件中 __u32 的指针

python - 由于语法无效, Airflow initdb 失败

ubuntu - Selenium 无法启动 - Ubuntu 14

ubuntu - Redis 踢出空/空白 pid 文件

linux - 在 Gedit 中以选项卡形式打开文件

python - pip 在标准输出中打印垃圾消息

javascript - 在 Raspberry Pi Zero 上,puppeteer 在超时后挂起

javascript - 在 Linux 16.04 中使用 create-react-app 创建应用程序失败

Java Chrome Selenium CI 测试随机挂起 3 小时

linux - 内存泄漏会导致 getaddrinfo EMFILE