编译——初识

编译

介绍

GCC(英文全拼:GNU Compiler Collection)是 GNU 工具链的主要组成部分,是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件,由 Richard Stallman 于 1985 年开始开发。
各文件后缀说明如下:
后缀
描述
后缀
描述
.c
C 源文件
.s/.S
汇编语言源文件
.C/.cc/.cxx/.cpp
C++ 源文件
.o/.obj
目标文件
.h
C/C++ 头文件
.a/.lib
静态库
.i/.ii
经过预处理的 C/C++ 文件
.so/.dll
动态库
source code file--源文件
Pre-processor--预处理
Compiler--编译器
Assembly code--汇编代码
Assembler--汇编器
Object file--目标文件-- 二进制文件--包含在 ASCII及扩展 ASCII 字符中编写的数据或程序指令的文件。计算机文件基本上分为二种:二进制文件和 ASCII(也称纯文本文件),图形文件及文字处理程序等计算机程序都属于二进制文件。
libraries--库文件-- 库文件是计算机上的一类文件,提供给使用者一些开箱即用的变量、函数或类。库文件分为静态库和动态库
静态库-- 静态库在程序的链接阶段被复制到了程序中
动态库-- 动态库在链接阶段没有被复制到程序中,而是程序在运行时由系统动态加载到内存中供程序调用
linker--链接器-- 一个程序,将一个或多个由 编译器 汇编器 生成的目标文件外加库链接为一个 可执行文件
Executable file--可执行文件
诸如括号、注释等非可执行语句并不会转化为机器指令
1.编译 hello.c,默认输出 a.out
gcc hello.c
2.编译 hello.c 并指定输出文件为 hello
gcc hello.c -o hello
3。只执行预处理,输出 hello.i 源文件
gcc -E hello.c -o hello.i
4.只执行预处理和编译,输出 hello.s 汇编文件
gcc -S hello.c
5.也可以由 hello.i 文件生成 hello.s 汇编文件
gcc -S hello.i -o hello.s
6.只执行预处理、编译和汇编,输出 hello.o 目标文件
gcc -c hello.c
7.也可以由 hello.i 或 hello.s 生成目标文件 hello.o
gcc -c hello.i -o hello.o
gcc -c hello.s -o hello.o
8.由 hello.o 目标文件链接成可执行文件 hello
gcc hello.o -o hello
### Dockerfile入门教程 #### 定义基础镜像 `FROM` 指令用于指定构建新镜像所基于的基础镜像。这通常是官方仓库中的某个标准镜像,或者是之前创建的自定义镜像。 ```dockerfile FROM ubuntu:latest ``` 此行表示使用最新版本的Ubuntu作为基础镜像[^4]。 #### 设置维护者信息 为了记录谁负责该镜像及其后续更新,可以通过 `MAINTAINER` 来指明作者姓名或者联系邮箱地址: ```dockerfile MAINTAINER John Doe john@example.com ``` 不过需要注意的是,在较新的Docker版本中推荐使用 `LABEL` 替代 `MAINTAINER` ,因为后者已被弃用[^3]。 #### 配置环境变量 利用 `ENV` 可以为容器内部设定持久性的环境配置项,这对于应用程序运行时所需的特定条件非常有用: ```dockerfile ENV APP_HOME /usr/src/app \ NODE_ENV production ``` 上述例子设置了两个环境变量:一个是应用的工作路径;另一个指示节点处于生产模式下工作. #### 执行命令序列化 `RUN` 是用来执行任意合法Shell命令的主要手段之一,它会在当前层之上新增一层并保存更改结果至其中。通常会在此阶段安装依赖包、编译源码等操作: ```dockerfile RUN apt-get update && apt-get install -y nodejs npm git ``` 这条语句先刷新软件列表再依次下载Node.js, NPM以及Git工具集. #### 添加文件或目录 当需要把本地机器上的静态资源同步给目标容器时,则可借助于 `ADD` 或者更常用的 `COPY` 。两者区别在于前者支持远程URL链接并且能够识别tarball格式自动解压而后者不具备这些特性: ```dockerfile COPY ./src ${APP_HOME} ``` 这段代码片段意味着将项目根目录下的`src`整个拷贝到先前由`WORKDIR`确立的位置上. #### 设定默认工作区 每当启动一个新的进程实例,默认情况下都会位于根(`/`)之下运作。然而很多时候希望改变这一行为从而简化相对路径表达式的书写难度——这时就轮到了 `WORKDIR` 登场了: ```dockerfile WORKDIR $APP_HOME ``` 如此一来无论何时何地只要涉及到文件系统的访问动作都将以此处为起点展开探索之旅. #### 构建过程总结 综上所述,一份完整的Dockerfile可能看起来如下所示: ```dockerfile # 使用官方Python镜像为基础镜像 FROM python:3.8-slim-buster # 维护者信息(建议采用标签方式) LABEL maintainer="John Doe <john@example.com>" # 创建必要的环境变量 ENV PYTHONDONTWRITEBYTECODE 1 ENV PYTHONUNBUFFERED 1 # 更新系统库表单并向其添加所需组件 RUN pip install --upgrade pip # 将当前项目的全部内容传输过去 COPY . . # 明确指出接下来的操作均发生在该项目所在位置之内 WORKDIR /code # 运行pip freeze以确保所有依赖都被正确解析出来 RUN pip install -r requirements.txt ``` 这份文档不仅涵盖了如何编写基本结构化的Dockerfile还提供了实际应用场景里的最佳实践指导原则[^2].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值