ubuntu中,c和c+程序,预编译、编译、链接和运行命令

目录

安装编译器

确保安装了 gcc(用于 C 程序)和 g++(用于 C++ 程序)编译器:

cpp 复制代码
sudo apt update
sudo apt install build-essential  # 安装 GCC 和 G++ 编译器

一.c

编译+运行(粗暴简单)

cpp 复制代码
使用 gcc 编译器编译程序,并生成一个可执行文件。
		gcc hello.c -o hello

编译成功后,运行生成的可执行文件:
		./hello
输出:Hello, Ubuntu! (C)

1.编写 C 程序:

nano hello.c 打开或创建

输入以下代码:

cpp 复制代码
#include <stdio.h>
int main() {
    printf("Hello, Ubuntu! (C)\n");
    return 0;
}

2. 预处理:

cpp 复制代码
gcc -E hello.c -o hello.i
-E:仅执行预处理步骤。
hello.i:预处理后的输出文件。

3.编译:

cpp 复制代码
gcc -S hello.i -o hello.s
-S:生成汇编代码。
hello.s:汇编代码文件。

4. 汇编:

cpp 复制代码
gcc -c hello.s -o hello.o
-c:生成目标文件(二进制)。
hello.o:目标文件。

5. 链接:

cpp 复制代码
gcc hello.o -o hello
将目标文件链接为可执行文件。
运行程序:

6.运行

cpp 复制代码
./hello
输出:Hello, Ubuntu! (C)

二.c++

编译+运行(粗暴简单)

cpp 复制代码
使用 g++ 编译器编译程序,并生成一个可执行文件。
		g++ hello.cpp -o hello_cpp
编译成功后,运行生成的可执行文件:
		./hello_cpp
输出:Hello, Ubuntu! (C++)

1.编写 C++ 程序:

cpp 复制代码
nano hello.cpp  打开或创建

输入以下代码:

cpp 复制代码
#include <iostream>
int main() {
    std::cout << "Hello, Ubuntu! (C++)" << std::endl;
    return 0;
}

2.预处理:

cpp 复制代码
g++ -E hello.cpp -o hello.ii
-E:仅执行预处理步骤。
hello.ii:预处理后的输出文件。

3.编译:

cpp 复制代码
g++ -S hello.ii -o hello.s
-S:生成汇编代码。
hello.s:汇编代码文件。

4.汇编:

cpp 复制代码
g++ -c hello.s -o hello.o
-c:生成目标文件(二进制)。
hello.o:目标文件。

5. 链接:

cpp 复制代码
g++ hello.o -o hello_cpp
将目标文件链接为可执行文件。

6.运行程序:

cpp 复制代码
./hello_cpp
输出:Hello, Ubuntu! (C++)

三 . 关键区别

编译器:

cpp 复制代码
C 程序使用 gcc。
C++ 程序使用 g++。

文件扩展名:

cpp 复制代码
C 程序通常使用 .c 扩展名。
C++ 程序通常使用 .cpp 或 .cc 扩展名。

头文件:

cpp 复制代码
C 程序使用 #include <stdio.h>。
C++ 程序使用 #include <iostream>。

四. 其他注意事项

调试:可以使用 gdb 调试编译后的程序。

cpp 复制代码
sudo apt install gdb
gdb ./hello

优化:在编译时添加 -O2 或 -O3 标志以启用优化。

cpp 复制代码
gcc -O2 hello.c -o hello

多文件编译:如果有多个源文件,可以一起编译:

cpp 复制代码
gcc file1.c file2.c -o program
相关推荐
人生匆匆12 分钟前
linux ext4缩容home,扩容根目录
linux·运维·服务器
Linux技术芯36 分钟前
#Linux内存管理#缺页中断处理的核心函数是do_page_fault()的工作原理
linux
yuanzhengme1 小时前
Shell【脚本 02】离线安装配置Zookeeper及Kafka并添加service服务和开机启动(脚本分析)
linux·zookeeper·kafka·自动化·安装脚本
重生之我是Java开发战士1 小时前
【C语言】内存函数与数据在内存中的存储
c语言·开发语言·算法
Hello_Embed2 小时前
嵌入式 C 语言入门:循环结构学习笔记 —— 从语法到实用技巧
c语言·笔记·stm32·学习
Johny_Zhao2 小时前
阿里云平台健康检查巡检清单-运维篇
linux·网络安全·阿里云·信息安全·云计算·shell·系统运维
来自于狂人2 小时前
CentOS 镜像源配置与 EOL 后的应对策略
linux·运维·centos
博语小屋3 小时前
进程初识之进程状态
linux
南棱笑笑生3 小时前
20250802让飞凌OK3576-C开发板在飞凌的Android14下【rk3576_u选项】适配NXP的WIFIBT模块88W8987A的蓝牙
c语言·开发语言
吉凶以情迁3 小时前
window服务相关问题探索 go语言服务开发探索调试
linux·服务器·开发语言·网络·golang