10. .out文件

.out 文件是类Unix系统(Linux、macOS、FreeBSD等)下,C/C++/C#等编译型语言默认的可执行文件 ,是编译器(gcc/g++/clang)编译链接源代码后生成的二进制可执行程序 ,和Windows系统里的 .exe 文件功能完全一致,只是不同系统的可执行文件格式(.out是ELF格式、.exe是PE格式)和后缀约定不同。

核心关键信息

  1. 为什么默认是.out?

    早期Unix系统的编译器(a.out编译器),会把编译链接后的可执行文件固定命名为 a.out(a 代表 assembler 汇编器,out 代表 output 输出),这个命名习惯一直沿用到现在,gcc/g++/clang 编译时如果不指定可执行文件名称 ,就会默认生成 a.out

    例:直接用 gcc test.c 编译C文件,会自动生成 a.out;用 g++ test.cpp 编译C++文件,也是默认生成 a.out

  2. 怎么自定义可执行文件名称(避免a.out)?

    编译时用 -o 参数(output 缩写)指定名称即可,这是实际开发中最常用的方式,一般会把后缀去掉,直接用项目/功能命名。

    例:

    bash 复制代码
    gcc test.c -o myapp  # 编译后生成 可执行文件myapp(无后缀)
    g++ test.cpp -o calc # 编译后生成 可执行文件calc(无后缀)
  3. 怎么运行.out文件?

    类Unix系统中不能直接双击运行 ,需要在终端 中通过路径 执行,核心是加 ./(表示「当前目录」,系统默认不会在当前目录找可执行文件,必须显式指定)。

    例:

    bash 复制代码
    ./a.out       # 运行当前目录下的a.out
    ./myapp       # 运行自定义名称的可执行文件myapp
    /home/xxx/a.out # 运行绝对路径下的a.out
  4. .out文件能跨系统运行吗?

    不能!和Windows的.exe一样,.out平台相关的二进制文件

    • Linux下生成的a.out,不能在macOS/Windows上运行;
    • macOS下生成的a.out,不能在Linux/Windows上运行;
      跨系统需要重新在对应系统上编译源代码。
  5. 补充:不是所有.out都是可执行文件

    极少数情况下,部分工具/编译器会把输出日志、调试信息、目标文件 也命名为.out,但这种情况非常少见,99%的场景下,编程中遇到的.out都是可执行文件

和Windows的.exe文件对比

特性 .out文件(类Unix) .exe文件(Windows)
核心功能 二进制可执行程序 二进制可执行程序
默认生成 gcc/g++/clang 无-o参数时生成 MSVC/MinGW 无指定时生成
运行方式 终端 ./文件名 双击/命令行直接输文件名
底层格式 ELF(可执行链接格式) PE(可移植可执行格式)
跨平台性 仅对应类Unix系统可用 仅Windows系统可用

总结

  1. .out 是类Unix系统的默认可执行文件 ,等价于Windows的.exe
  2. 编译时用-o 自定义名称可避免生成a.out,实际开发中几乎都会这么做;
  3. 运行需在终端执行,核心是加./指定当前目录,格式为./文件名
  4. 是平台相关的二进制文件,无法跨系统运行。
相关推荐
STCNXPARM2 小时前
Linux camera之V4L2子系统详解
android·linux·camera·v4l2架构
yueyuexiaokeai13 小时前
linux kernel常用函数整理
linux·c语言
郝亚军4 小时前
ubuntu-18.04.6-desktop-amd64安装步骤
linux·运维·ubuntu
Konwledging5 小时前
kernel-devel_kernel-headers_libmodules
linux
Web极客码5 小时前
CentOS 7.x如何快速升级到CentOS 7.9
linux·运维·centos
一位赵5 小时前
小练2 选择题
linux·运维·windows
代码游侠5 小时前
学习笔记——Linux字符设备驱动开发
linux·arm开发·驱动开发·单片机·嵌入式硬件·学习·算法
Lw老王要学习6 小时前
CentOS 7.9达梦数据库安装全流程解析
linux·运维·数据库·centos·达梦
CRUD酱6 小时前
CentOS的yum仓库失效问题解决(换镜像源)
linux·运维·服务器·centos