小编典典

其他答案仅涉及如何避免这种情况,而不是 实际发生的问题 。

gcc -c a.c; ld -lc a.o您提供的命令会产生非常明显的警告:

ld: warning: cannot find entry symbol _start; defaulting to 0000000000400260

因此,即使可以执行该文件,它也可能立即崩溃。 请参阅@EmployedRussian的答案 ,以获取有关应该执行的操作的说明。

为什么甚至无法执行该问题仍然很有趣:

$ strace ./a.out

execve("./a.out", ["./a.out"], [/* 72 vars */]) = -1 ENOENT (No such file or directory)

execve(2)返回ENOENT,因为它找不到解释器(我从中找出了解释器file,依此类推,请参见下文)。从尝试运行以开头的文件时,您会得到相同的错误

#!/usr/non-existant-path/bin/bash

如您所发现,此错误消息的通常原因是在没有安装正确的动态链接器和动态库的系统(例如,未安装32位支持的64位系统)上运行ELF二进制文件时。在您的情况下,这是因为您使用了错误的链接命令,并使用错误的解释器路径制作了动态可执行文件。

我在Ubuntu 15.10上,其中GNU file版本5.22报告:

a.out: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib/ld64.so.1, not stripped

/lib/ld64.so.1我的系统上没有。 ldd输出令人困惑,因为ldd使用其默认的ELF解释程序,而不是二进制文件指定的解释程序。

$ ldd a.out

linux-vdso.so.1 => (0x00007ffc18d2b000)

libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f0e0a79f000)

/lib/ld64.so.1 => /lib64/ld-linux-x86-64.so.2 (0x0000559dbc9d2000)

因此ldd,我猜它假设二进制文件中的运行时解释器已解析为使用过的解释器。

您的ldd输出可能也来自旧版本,因为它仅显示/lib64/ld-

linux-x86-64.so.2该行。对于像这样的怪异情况,最好不要做出错误的猜测,但是这并不能帮助您看到二进制文件具有奇怪的解释器路径。

readelf -l a.out

将为您解码ELF标头,包括解释器路径。(感谢@EmployedRussian的评论指出了这一点。)

2020-06-07

linux运行c程序a. out,bash:./a.out:在由ld生成的运行可执行文件上没有这样的文件或目录。...相关推荐

  1. Linux错误27,解决在linux下编译32程序出现“/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录问题”...

    centos64位编译32位代码,出现/usr/include/gnu/stubs.h:7:27: 致命错误:gnu/stubs-32.h:没有那个文件或目录,需要安装32位的glibc库文件. 安装 ...

  2. php运行安装程序,phpStudy|phpStudy下载 2014.10.02最新版[PHP环境运行安装程序] 下载_久友软件下载...

    phpStudy适用于WIN系统的PHP程序运行环境一键安装包,免配置,即可使用,包括:pache+php+mysql+phpmyadmin+zendoptimizer,该程序不仅包括php调试环境, ...

  3. 【必看】如何在 Linux 上恢复误删除的文件或目录

    Linux不像windows有那么显眼的回收站,不是简单的还原就可以了.linux删除文件还原可以分为两种情况,一种是删除以后在进程存在删除信息,一种是删除以后进程都找不到,只有借助于工具还原.这里分 ...

  4. 在Linux上按大小列出文件和目录

    This page will show us how to create a list of files and folders ordered by size using standard Linu ...

  5. 如何在Linux上恢复误删除的文件或目录

    点击上方"朱小厮的博客",选择"设为星标" 后台回复"书",获取 Linux不像windows有那么显眼的回收站,不是简单的还原就可以了.l ...

  6. android运行ipa,AIR 命令行打包 ipa和apk (air adt 生成 带运行环境 apk ipa)

    最近使用了一下命令行 ADT打包移动程序,效率不错留个记号 在这之前首先需要AIR3.0以上SDK,然后配置环境变量(在 lib/android/bin 文件夹中)我只配置了 Path 环境变量 然后 ...

  7. Linux 上不可修改的文件和目录

         有时候我们需要让一个我们自己的目录中的内容不能变动,也就是不允许其他人随便删改我们的目录和目录中的文件.这里,首先,我们需要知道两个概念,文件的粘滞位和属性.       文件如果设置了粘滞 ...

  8. linux文件上传,给文件或目录添加apache权限

    系统环境:ubuntu11.10/apache2/php5.3.6 在LAMP环境中,测试一个简单的php文件上传功能时,发现/var/log/apache2/error.log中出现如下php警告: ...

  9. shell脚本配置运行python程序,小技巧之 Linux 软连接的使用

    shell脚本配置运行python程序,小技巧之 Linux 软连接的使用 实验室的多位博士会在同一台机器上跑python程序,主流的跑程序的方法有两种 使用sh脚本配置路径和程序 直接激活conda ...

最新文章

  1. [Educational Codeforces Round 16]A. King Moves
  2. 1、利用蓝牙定位及姿态识别实现一个智能篮球场套件(一)——用重写CC2541透传模块做成智能手环...
  3. 鼠标悬停事件_Red语言-GUI-事件和参与者
  4. 2021年,Java开发者值得学习的13项技能
  5. java(7)——+=的妙用
  6. 进程线程协程-基本概念及特点
  7. 电脑重装系统按什么键进U盘PE
  8. C语言的本质(2)——二进制、八进制、十六进制与十进制
  9. mysql5.7系列使用记录信息
  10. 破圈了!完美日记凭什么让周迅成为全球品牌代言人
  11. Elasticsearch-拼音分词/排序
  12. 复杂性思维第二版 一、复杂性科学
  13. UltraVNC源码编译运行
  14. web前端不好找工作之web前端面试简历补救篇
  15. 第2阶段 第12讲 XMLHTTP协议
  16. DIV+CSS布局基本流程及实例介绍
  17. 理解电脑上的串口对应的端口号(com口)
  18. java 生成随机数字_java如何产生随机数
  19. 一个10年程序员给大家的忠告
  20. 电路课组(一)电路原理 Review 2 动态电路时域分析

热门文章

  1. 【python进阶】_文件和目录操作
  2. python 魔法参数*argv 和 **kw
  3. 利用TensorFlow2.0为胆固醇、血脂、血压数据构建时序深度学习模型(python完整源代码)
  4. Hash特征编码在推荐系统的应用
  5. solr 使用自定义的 QueryParser
  6. Java 日志缓存机制的实现--转载
  7. jquery学习手记(1)
  8. 【科技金融】CART树现金贷风控策略
  9. Deep Learning的基础概念
  10. 利润1000亿元:靠的是游戏,广告和微信,你怕了吗