华为云鲲鹏云服务器gcc编译源代码实验

本文详细介绍了在华为云鲲鹏云服务器上使用GCC编译器进行源代码编译的过程,包括预处理、编译、汇编和链接四个阶段,最终成功生成并运行了可执行文件。实验中特别提到了在链接阶段因使用了sqrt函数而需要添加-lm选项来链接数学库。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

华为云鲲鹏云服务器gcc编译源代码实验

  1. 将文件上传到服务器中

  2. 进行预处理:生成.i文件

    [root@node gcc编译使用源代码]# gcc -E main.c -o main.i
    [root@node gcc编译使用源代码]# gcc -E sqrtSum.c -o main.i
    [root@node gcc编译使用源代码]# ll
    total 100
    -rw-r--r-- 1 root root   375 May 28 16:34 main.c
    -rw-r--r-- 1 root root 40262 May 28 16:36 main.i
    -rw-r--r-- 1 root root   109 May 28 16:34 sqrtSum.c
    -rw-r--r-- 1 root root    93 May 28 16:34 sqrtSum.h
    -rw-r--r-- 1 root root 46114 May 28 16:36 sqrtSum.i
    
  3. 进行编译:生成.s文件

    [root@node gcc编译使用源代码]# gcc -S main.i -o main.s
    [root@node gcc编译使用源代码]# gcc -S sqrtSum.i -o sqrtSum.s
    [root@node gcc编译使用源代码]# ll
    total 108
    -rw-r--r-- 1 root root   375 May 28 16:34 main.c
    -rw-r--r-- 1 root root 40262 May 28 16:36 main.i
    -rw-r--r-- 1 root root  1133 May 28 16:37 main.s
    -rw-r--r-- 1 root root   109 May 28 16:34 sqrtSum.c
    -rw-r--r-- 1 root root    93 May 28 16:34 sqrtSum.h
    -rw-r--r-- 1 root root 46114 May 28 16:36 sqrtSum.i
    -rw-r--r-- 1 root root   651 May 28 16:37 sqrtSum.s
    
  4. 进行汇编:生成.o文件

    [root@node gcc编译使用源代码]# gcc -c main.s
    [root@node gcc编译使用源代码]# gcc -c sqrtSum.s
    [root@node gcc编译使用源代码]# ll
    total 116
    -rw-r--r-- 1 root root   375 May 28 16:34 main.c
    -rw-r--r-- 1 root root 40262 May 28 16:36 main.i
    -rw-r--r-- 1 root root  2040 May 28 16:38 main.o
    -rw-r--r-- 1 root root  1133 May 28 16:37 main.s
    -rw-r--r-- 1 root root   109 May 28 16:34 sqrtSum.c
    -rw-r--r-- 1 root root    93 May 28 16:34 sqrtSum.h
    -rw-r--r-- 1 root root 46114 May 28 16:36 sqrtSum.i
    -rw-r--r-- 1 root root  1480 May 28 16:38 sqrtSum.o
    -rw-r--r-- 1 root root   651 May 28 16:37 sqrtSum.s
    
  5. 进行链接

    [root@node gcc编译使用源代码]# gcc -o sqrtSum main.o sqrtSum.o -lm
    [root@node gcc编译使用源代码]# ll
    total 136
    -rw-r--r-- 1 root root   375 May 28 16:34 main.c
    -rw-r--r-- 1 root root 40262 May 28 16:36 main.i
    -rw-r--r-- 1 root root  2040 May 28 16:38 main.o
    -rw-r--r-- 1 root root  1133 May 28 16:37 main.s
    -rwxr-xr-x 1 root root 75448 May 28 16:39 sqrtSum
    -rw-r--r-- 1 root root   109 May 28 16:34 sqrtSum.c
    -rw-r--r-- 1 root root    93 May 28 16:34 sqrtSum.h
    -rw-r--r-- 1 root root 46114 May 28 16:36 sqrtSum.i
    -rw-r--r-- 1 root root  1480 May 28 16:38 sqrtSum.o
    -rw-r--r-- 1 root root   651 May 28 16:37 sqrtSum.s
    

    由于sqrt函数所以需带上-lm选项来表示链接外部库使用sqrt函数

  6. 运行测试

    [root@node gcc编译使用源代码]# ./sqrtSum 2 3
    sqrt 2.000000 + sqrt 3.000000 = 3.146264
    
### 华为云服务器上使用 GCC 编译程序 #### 安装 GCC 编译器 为了能够在华为云服务器编译 C/C++ 程序,首先需要确认服务器已经安装了 GCC 编译工具链。如果没有安装,则可以按照如下命令进行安装: 对于基于 Red Hat 或 CentOS 的系统: ```bash sudo yum install gcc-c++ ``` 对于基于 Debian 或 Ubuntu 的系统: ```bash sudo apt-get update && sudo apt-get install build-essential ``` 这会安装必要的开发工具包以及 GCC 编译器[^1]。 #### 预处理阶段 在实际编译之前,通常会对源代码执行预处理操作。此过程涉及宏替换、头文件包含等内容展开等工作。例如,在给定的例子中,`main.c` 和 `sqrtSum.c` 文件被分别进行了预处理,并生成了对应的 `.i` 文件作为输出结果[^2]: ```bash gcc -E main.c -o main.i gcc -E sqrtSum.c -o sqrtSum.i ``` 需要注意的是,上述两条命令中的第二个参数应当不同,以避免覆盖前一次的预处理输出文件。因此建议修改第二条指令的目标文件名为 `sqrtSum.i` 而不是重复命名成 `main.i`。 #### 编译与链接 完成预处理之后,下一步就是将这些经过预处理后的中间文件转换为目标二进制可执行文件。具体来说,可以通过调用 `gcc` 命令来进行编译和链接工作。假设我们有一个简单的项目结构,其中包含了两个C语言源码文件 (`main.c`, `sqrtSum.c`) 以及它们依赖的一个头文件(`sqrtSum.h`) ,那么完整的编译流程可能像这样: ```bash gcc -c main.i -o main.o # 将 .i 文件编译为 .o 对象文件 gcc -c sqrtSum.i -o sqrtSum.o # 同样地, 处理另一个源文件 gcc main.o sqrtSum.o -lm -o myprogram # 进行最终链接, 并指定数学库 `-lm` ``` 这里特别指出一点:当涉及到数学函数计算时(比如平方根),记得加上 `-lm` 参数以便正确连接标准数学库。 #### 使用交叉编译工具链 (针对特定架构) 如果目标是在鲲鹏弹性云服务器或其他 ARM 架构机器上运行应用程序的话,还需要考虑采用适合该硬件平台特性的交叉编译环境。可以从 Linaro 获取适用于 AArch64 架构的 GCC 工具链版本[^4]: ```bash wget https://releases.linaro.org/components/toolchain/binaries/latest/aarch64-linux-gnu/gcc-linaro-*-x86_64_aarch64-linux-gnu.tar.xz tar xf gcc-linaro-*-x86_64_aarch64-linux-gnu.tar.xz export PATH=$PWD/gcc-linaro-*-x86_64_aarch64-linux-gnu/bin:$PATH aarch64-linux-gnu-gcc --version # 测试新安装的交叉编译器是否可用 ``` 以上步骤展示了如何设置一个基本的工作流来利用 GCC华为云服务实例上构建软件应用。当然实际情况可能会更加复杂一些,特别是当你想要支持更多特性或是优化性能的时候。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MirkoLin596

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值