当前位置: 首页 > news >正文

C语言与Java语言编译过程及文件类型

大家天天开心!

文章目录

  • 前言
  • 一、C语言编译过程和文件类型
  • 二、Java编译与执行过程
    • Java编译流程:
    • Java文件类型讲解:
    • Java生成EXE的原理
  • 三、C语言VSJava编译对比
  • 四、关键概念详解
    • 1.引入库
    • 2.读入数据
  • 五、实际项目文件结构示例:
  • 总结


前言

     我现在对文件的一些类型是什么还是有点迷,包括对于C语言和Java语言我们在编译执行完成分别生成的什么文件还是印象不深,所以我想把这些一起总结一下。


提示:以下是本篇文章正文内容,下面案例可供参考

一、C语言编译过程和文件类型

    完整编译过程:

源代码c----->预处理器------>预处理后.i------->编译器------->汇编代码.s--------->汇编器------>目标文件.obj/.o-------->链接器-------->可执行文件.exe

     各阶段生成文件详解:

文件类型​

​扩展名​

​内容​

​作用​

​是否可删除​

源代码.c/.cpp人类可读代码编程基础保留
头文件.h函数声明/宏定义代码复用保留
预处理文件.i宏展开后的代码调试用可删除
汇编文件.s/.asm汇编指令中间表示可删除
目标文件.obj(Win)/.o(Unix)机器码(未连接)模块化编译可删除
静态库.lib(Win)/.a(Unix)多个目标文件集合代码复用保留
动态链接库.dll(Win)/.so(Unix)可共享的机器码运行时加载保留
可执行文件.exe(Win)/无扩展名(Unix)完整机器码直接运行保留
调试信息.pdb(Win)/.dSYM(macOS)符号表/调试信息调试用可删除(发布时)
数据文件.dat程序数据存储数据保留

编译过程详解:

(1)预处理阶段:

gcc -E main.c -o main.i

处理#include,#define等指令

删除注释

展开宏

(2)编译阶段 :

gcc -S main.i -o main.s

将C代码转为汇编代码

平台相关优化

(3)汇编阶段:

gcc -c main.s -o main.o

将汇编代码转为机器码

生成目标文件(.o)

(4)链接阶段

gcc main.o -o program

合并多个目标文件

链接库文件

生成可执行文件

库文件对比:

特性​

​静态库 (.lib/.a)​

​动态库 (.dll/.so)​

​链接时机​

编译时

运行时

​文件大小​

较大(包含库代码)

较小(仅引用)

​内存使用​

每个程序独立拷贝

共享内存

​更新​

需重新编译

替换文件即可

​依赖​

无运行时依赖

需库文件存在

​示例​

libmath.a

math.dll

二、Java编译与执行过程

     Java编译流程:

         源代码.java   ------->javac编译器 --------->字节码.class -------->JVM -------->机器码

     Java文件类型讲解:

   源代码               .java               java代码                     编程基础

  字节代码           .class               JVM指令                   跨平台执行

 归档文件              .jar                  多个.class打包              分发程序

Web应用               .war                 Web应用打包            部署到服务器

企业应用               .ear                多个模块打包              J2EE应用

本地库                   .dll/.so             JNI本地代码               本地方法

配置文件                .properties         键值对配置                程序配置

序列化数据            .ser                  对象序列化                   对象持久化

 Java生成EXE的原理

Java本身不直接生成原生EXE,但可以通过以下方式实现:

(1) 打包为可执行JAR
# 创建可执行JAR
jar cfe app.jar MainClass *.class# 运行
java -jar app.jar
(2) 使用打包工具生成EXE

常用工具​​:

  • Launch4j:轻量级包装器

  • Excelsior JET:提前编译为本地代码

  • GraalVM Native Image:编译为本地可执行文件

三、C语言 vs Java编译对比

​特性​

​C语言​

​Java​

​编译输出​

机器码

字节码

​执行方式​

直接运行

JVM解释执行/JIT编译

​跨平台​

需重新编译

字节码跨平台

​依赖文件​

.dll/.so

JRE/JDK

​编译速度​

较慢

较快

​运行时性能​

中等(JIT优化后接近C)

​内存管理​

手动

自动垃圾回收

​典型文件​

.c, .h, .obj, .exe

.java, .class, .jar

​调试文件​

.pdb

无专用格式(JVM内置)

四、关键概念详解

1. .dat文件

  • ​本质​​:通用数据文件(非特定格式)

  • ​常见内容​​:

    • 二进制数据(如图像、音频)

    • 文本数据(CSV、自定义格式)

    • 程序配置

  • ​生成方式​​:

// C语言创建.dat文件
FILE *fp = fopen("data.dat", "wb");
fwrite(buffer, sizeof(char), size, fp);
fclose(fp);

2. DLL(动态链接库)

优势​​:

  • 节省内存

  • 更新无需重新编译主程序

  • 模块化开发

3. Java字节码执行

五、实际项目文件结构示例

C语言项目:

myapp/
├── src/
│   ├── main.c
│   ├── utils.c
│   └── utils.h
├── lib/
│   └── thirdparty.lib
├── bin/
│   ├── myapp.exe
│   └── app.dll
└── data/
    └── config.dat

Java项目:

myapp/
├── src/
│   └── com/
│       └── myapp/
│           ├── Main.java
│           └── Util.java
├── target/
│   ├── classes/
│   │   └── com/
│   │       └── myapp/
│   │           ├── Main.class
│   │           └── Util.class
│   └── myapp.jar
└── config/
    └── app.properties


总结

  1. C语言编译​​:

    • 生成机器码

    • 产生中间文件(.i, .s, .o)

    • 最终输出平台相关可执行文件

  2. ​Java编译​​:

    • 生成字节码(.class)

    • 依赖JVM执行

    • 通过打包工具可生成EXE

  3. ​关键文件​​:

    • .dll/.so:共享库

    • .dat:通用数据文件

    • .jar:Java打包格式

    • .exe:Windows可执行文件

  4. ​跨平台差异​​:

    • C:需为每个平台编译

    • Java:一次编译,到处运行(需JVM)

理解这些文件类型和编译过程,将帮助您更好地组织项目、调试程序,并选择适合的部署策略。

http://www.dtcms.com/a/470393.html

相关文章:

  • 基于SpringBoot的农产品(商城)销售系统
  • 有名的网站建设wordpress博客站模板下载
  • 网站打不开如何解决深圳企业网站建设服务中心
  • 专业的论坛网站建设开发wordpress静态化
  • hive的一些优化配置
  • 做网站一屏一屏的盖州网站建设
  • 佳木斯建设工程交易中心网站在龙港网站哪里做
  • 工具收集 - ContextMenuManager 右键管理
  • 【软件设计师中级】计算机组成与结构(六):系统性能评测与可靠性基础 - 衡量计算机的“尺子“与“保险“
  • 当游戏NPC有了“灵魂”,网易伏羲解码游戏智能交互场景新实践
  • 热更新:移动应用的“空中加油”技术-详解什么是热更新?-优雅草卓伊凡卓伊凡的挑战
  • 【GD32】软、硬件I2C对比
  • YMODEM 协议介绍以及通信流程分析和Lua语言实现
  • 视频直播点播平台EasyDSS如何助力餐饮行业实现“明厨亮灶”直播?
  • 通过网站做外贸广告公司有哪些
  • 关于网站建设的好处seo搜索优化邵阳
  • 百家号淄博圻谷网站建设做网站页面一般用什么软件
  • CCF-GESP 等级考试 2024年3月认证C++三级真题解析
  • 本地部署 DeepSeek 私有助手:从零到上线的完整方案
  • CTF攻防世界WEB精选基础入门:weak_auth
  • 石家庄网站建设蓝点公路建设网站
  • 免费制作网页的网站企业app定制开发公司
  • 若依框架Springboot开发开放接口供他人调用
  • 在Centos上安装Python指定版本
  • 体育赛事 APP 开发:从技术到体验的全方位突破
  • 【阿里云】记一次oss攻击
  • MySQL高效备份实战指南
  • OpenBLT移植教程
  • 怎样做站长建网站荥阳市建设局网站
  • 虚拟仿真实训:打破时空界限,重塑未来技能,引领教育新变革