第3章、Linux下C编程基础
|
|
|
- 縻 多
- 9 years ago
- Views:
Transcription
1
2 第 3 章 Linux 下 C 编 程 基 础 本 章 目 标 本 章 将 带 领 读 者 学 习 在 Linux 中 进 行 C 语 言 编 程 的 基 本 技 能 学 习 了 本 章 后, 读 者 能 够 掌 握 如 下 内 容 熟 悉 Linux 系 统 下 的 开 发 环 境 熟 悉 vi 的 基 本 操 作 熟 练 emacs 的 基 本 操 作 熟 悉 gcc 编 译 器 的 基 本 原 理 熟 练 使 用 gcc 编 译 器 的 常 用 选 项 熟 练 使 用 gdb 的 调 试 技 术 熟 悉 makefile 基 本 原 理 及 语 法 规 范 熟 练 使 用 autoconf 和 automake 生 成 makefile
3 3.1 Linux 下 C 语 言 编 程 概 述 C 语 言 简 单 回 顾 C 语 言 最 早 是 由 贝 尔 实 验 室 的 Dennis Ritchie 为 了 UNIX 的 辅 助 开 发 而 编 写 的, 它 是 在 B 语 言 的 基 础 上 开 发 出 来 的 尽 管 C 语 言 不 是 专 门 针 对 UNIX 操 作 系 统 或 机 器 编 写 的, 但 它 与 UNIX 系 统 的 关 系 十 分 紧 密 由 于 它 的 硬 件 无 关 性 和 可 移 植 性, 使 C 语 言 逐 渐 成 为 世 界 上 使 用 最 广 泛 的 计 算 机 语 言 为 了 进 一 步 规 范 C 语 言 的 硬 件 无 关 性,1987 年, 美 国 国 家 标 准 协 会 (ANSI) 根 据 C 语 言 问 世 以 来 各 种 版 本 对 C 语 言 的 发 展 和 扩 充, 制 定 了 新 的 标 准, 称 为 ANSI C ANSI C 语 言 比 原 来 的 标 准 C 语 言 有 了 很 大 的 发 展 目 前 流 行 的 C 语 言 编 译 系 统 都 是 以 它 为 基 础 的 C 语 言 的 成 功 并 不 是 偶 然 的, 它 强 大 的 功 能 和 它 的 可 移 植 性 让 它 能 在 各 种 硬 件 平 台 上 游 刃 自 如 总 体 而 言,C 语 言 有 如 下 特 点 (1)C 语 言 是 中 级 语 言 它 把 高 级 语 言 的 基 本 结 构 和 语 句 与 低 级 语 言 的 实 用 性 结 合 起 来 C 语 言 可 以 像 汇 编 语 言 一 样 对 位 字 节 和 地 址 进 行 操 作, 而 这 三 者 是 计 算 机 最 基 本 的 工 作 单 元 (2)C 语 言 是 结 构 化 的 语 言 C 语 言 采 用 代 码 及 数 据 分 隔, 使 程 序 的 各 个 部 分 除 了 必 要 的 信 息 交 流 外 彼 此 独 立 这 种 结 构 化 方 式 可 使 程 序 层 次 清 晰, 便 于 使 用 维 护 以 及 调 试 C 语 言 是 以 函 数 形 式 提 供 给 用 户 的, 这 些 函 数 可 方 便 地 调 用, 并 具 有 多 种 循 环 条 件 语 句 控 制 程 序 流 向, 从 而 使 程 序 完 全 结 构 化 (3)C 语 言 功 能 齐 全 C 语 言 具 有 各 种 各 样 的 数 据 类 型, 并 引 入 了 指 针 的 概 念, 可 使 程 序 效 率 更 高 另 外,C 语 言 也 具 有 强 大 的 图 形 功 能, 支 持 多 种 显 示 器 和 驱 动 器, 而 且 计 算 功 能 逻 辑 判 断 功 能 也 比 较 强 大, 可 以 实 现 决 策 目 的 (4)C 语 言 可 移 植 性 强 C 语 言 适 合 多 种 操 作 系 统, 如 DOS Windows Linux, 也 适 合 多 种 体 系 结 构, 因 此 尤 其 适 合 在 嵌 入 式 领 域 的 开 发 Linux 下 C 语 言 编 程 环 境 概 述 Linux 下 的 C 语 言 程 序 设 计 与 在 其 他 环 境 中 的 C 程 序 设 计 一 样, 主 要 涉 及 编 辑 器 编 译 链 接 器 调 试 器 及 项 目 管 理 工 具 现 在 我 们 先 对 这 4 种 工 具 进 行 简 单 介 绍, 后 面 会 对 其 一 一 进 行 讲 解 (1) 编 辑 器. Linux 下 的 编 辑 器 就 如 Windows 下 的 记 事 本 写 字 板 等 一 样, 完 成 对 所 录 入 文 字 的 编 辑 功 能 Linux 中 最 常 用 的 编 辑 器 有 vi(vim) 和 emacs, emacs 它 们 功 能 强 大 使 用 方 便, 深 受 编 程 爱 好 者 的 喜 爱 在 本 书 中, 着 重 介 绍 vi 和 (2) 编 译 链 接 器 编 译 是 指 源 代 码 转 化 生 成 可 执 行 代 码 的 过 程, 它 所 完 成 的 主 要 工 作 如 图 3.1 所 示
4 图 3.1 编 译 过 程 可 见, 编 译 过 程 是 非 常 复 杂 的, 它 包 括 词 法 语 法 和 语 义 的 分 析 中 间 代 码 的 生 成 和 优 化 符 号 表 的 管 理 和 出 错 处 理 等 在 Linux 中, 最 常 用 的 编 译 器 是 gcc 编 译 器 它 是 GNU 推 出 的 功 能 强 大 性 能 优 越 的 多 平 台 编 译 器, 其 执 行 效 率 与 一 般 的 编 译 器 相 比 平 均 效 率 要 高 20%~30% (3) 调 试 器 调 试 器 并 不 是 代 码 执 行 的 必 备 工 具, 而 是 专 为 方 便 程 序 员 调 试 程 序 而 用 的 有 编 程 经 验 的 读 者 都 知 道, 在 编 程 的 过 程 当 中, 往 往 调 试 所 消 耗 的 时 间 远 远 大 于 编 写 代 码 的 时 间 因 此, 有 一 个 功 能 强 大 使 用 方 便 的 调 试 器 是 必 不 可 少 的 gdb 是 绝 大 多 数 Linux 开 发 人 员 所 使 用 的 调 试 器, 它 可 以 方 便 地 设 置 断 点 单 步 跟 踪 等, 足 以 满 足 开 发 人 员 的 需 要 (4) 项 目 管 理 器 Linux 中 的 项 目 管 理 器 make 有 些 类 似 于 Windows 中 Visual c++ 里 的 工 程, 它 是 一 种 控 制 编 译 或 者 重 复 编 译 软 件 的 工 具, 另 外, 它 还 能 自 动 管 理 软 件 编 译 的 内 容 方 式 和 时 机, 使 程 序 员 能 够 把 精 力 集 中 在 代 码 的 编 写 上 而 不 是 在 源 代 码 的 组 织 上 3.2 常 用 编 辑 器 进 入 vi Linux 系 统 提 供 了 一 个 完 整 的 编 辑 器 家 族 系 列, 如 Ed Ex vi 和 emacs 等 按 功 能 它 们 可 以 分 为 两 大 类 : 行 编 辑 器 (Ed Ex) 和 全 屏 幕 编 辑 器 (vi emacs) 行 编 辑 器 每 次 只 能 对 一 行 进 行 操 作, 使 用 起 来 很 不 方 便 而 全 屏 幕 编 辑 器 可 以 对 整 个 屏 幕 进
5 行 编 辑, 用 户 编 辑 的 文 件 直 接 显 示 在 屏 幕 上, 从 而 克 服 了 行 编 辑 那 种 不 直 观 的 操 作 方 式, 便 于 用 户 学 习 和 使 用, 具 有 强 大 的 功 能 vi 是 Linux 系 统 的 第 一 个 全 屏 幕 交 互 式 编 辑 程 序, 它 从 诞 生 至 今 一 直 得 到 广 大 用 户 的 青 睐, 历 经 数 十 年 仍 然 是 人 们 主 要 使 用 的 文 本 编 辑 工 具, 足 以 见 其 生 命 力 之 强, 而 强 大 的 生 命 力 是 其 强 大 的 功 能 带 来 的 由 于 大 多 数 读 者 在 此 之 前 都 已 经 用 惯 了 Windows 平 台 上 的 编 辑 器, 因 此, 在 刚 刚 接 触 时 总 会 或 多 或 少 不 适 应, 但 只 要 习 惯 之 后, 就 能 感 受 到 它 的 方 便 与 快 捷 1.vi 的 模 式 vi 有 3 种 模 式, 分 别 为 命 令 行 模 式 插 入 模 式 及 命 令 行 模 式 下 面 具 体 介 绍 各 模 式 的 功 能 (1) 命 令 行 模 式 用 户 在 用 vi 编 辑 文 件 时, 最 初 进 入 的 为 一 般 模 式 在 该 模 式 中 用 户 可 以 通 过 上 下 移 动 光 标 进 行 删 除 字 符 或 整 行 删 除 等 操 作, 也 可 以 进 行 复 制 粘 贴 等 操 作, 但 无 法 编 辑 文 字 (2) 插 入 模 式 只 有 在 该 模 式 下, 用 户 才 能 进 行 文 字 编 辑 输 入, 用 户 按 [ESC] 可 键 回 到 命 令 行 模 式 (3) 底 行 模 式 在 该 模 式 下, 光 标 位 于 屏 幕 的 底 行 用 户 可 以 进 行 文 件 保 存 或 退 出 操 作, 也 可 以 设 置 编 辑 环 境, 如 寻 找 字 符 串 列 出 行 号 等 2.vi 的 基 本 流 程 (1) 进 入 vi, 即 在 命 令 行 下 键 入 vi hello ( 文 件 名 ) 此 时 进 入 的 是 命 令 行 模 式, 光 标 位 于 屏 幕 的 上 方, 如 图 3.2 所 示 图 3.2 进 入 vi 命 令 行 模 式
6 (2) 在 命 令 行 模 式 下 键 入 i 进 入 插 入 模 式, 如 图 3.3 所 示 可 以 看 出, 在 屏 幕 底 部 显 示 有 插 入 表 示 插 入 模 式 中 的 输 入 状 态, 在 该 模 式 下 可 以 输 入 文 字 信 息 图 3.3 进 入 vi 插 入 模 式 (3) 最 后, 在 插 入 模 式 中, 按 Esc 键, 则 当 前 模 式 转 入 命 令 行 模 式, 并 在 底 行 行 中 输 入 :wq ( 存 盘 退 出 ) 进 入 底 行 模 式, 如 图 3.4 所 示 这 样, 就 完 成 了 一 个 简 单 的 vi 操 作 流 程 : 命 令 行 模 式 插 入 模 式 底 行 模 式 由 于 vi 在 不 同 的 模 式 下 有 不 同 的 操 作 功 能, 因 此, 读 者 一 定 要 时 刻 注 意 屏 幕 最 下 方 的 提 示, 分 清 所 在 的 模 式
7 图 3.4 进 入 vi 底 行 模 式 3.vi 的 各 模 式 功 能 键 (1) 命 令 行 模 式 常 见 功 能 键 如 表 3.1 所 示 表 3.1 vi 命 令 行 模 式 功 能 键 功 能 键 功 能 i a o [ctrl]+[b] [ctrl]+[f] [ctrl]+[u] [ctrl]+[d] 切 换 到 插 入 模 式, 在 目 前 的 光 标 所 在 处 插 入 输 入 的 文 字, 已 存 在 的 文 字 会 向 后 退 切 换 到 插 入 模 式, 并 从 目 前 光 标 所 在 位 置 的 下 一 个 位 置 开 始 输 入 文 字 切 换 到 插 入 模 式, 且 从 行 首 开 始 插 入 新 的 一 行 屏 幕 往 后 翻 动 一 页 屏 幕 往 前 翻 动 一 页 屏 幕 往 后 翻 动 半 页 屏 幕 往 前 翻 动 半 页 0( 数 字 0) 光 标 移 到 本 行 的 开 头 G ng 光 标 移 动 到 文 件 的 最 后 光 标 移 动 到 第 n 行 $ 移 动 到 光 标 所 在 行 的 行 尾 n<enter> /name?name x X dd ndd yy nyy 光 标 向 下 移 动 n 行 在 光 标 之 后 查 找 一 个 名 为 name 的 字 符 串 在 光 标 之 前 查 找 一 个 名 为 name 的 字 符 串 删 除 光 标 所 在 位 置 的 一 个 字 符 删 除 光 标 所 在 位 置 的 前 一 个 字 符 删 除 光 标 所 在 行 从 光 标 所 在 行 开 始 向 下 删 除 n 行 复 制 光 标 所 在 行 复 制 光 标 所 在 行 开 始 的 向 下 n 行 p 将 缓 冲 区 内 的 字 符 粘 贴 到 光 标 所 在 位 置 ( 与 yy 搭 配 ) u 恢 复 前 一 个 动 作 (2) 插 入 模 式 的 功 能 键 只 有 一 个, 即 按 Esc 键 可 回 到 命 令 行 模 式 (3) 底 行 模 式 常 见 功 能 键 如 表 3.2 所 示 表 3.2 vi 底 行 模 式 功 能 键 功 能 键 功 能 :w 将 编 辑 的 文 件 保 存 到 磁 盘 中
8 :q 退 出 vi( 系 统 对 做 过 修 改 的 文 件 会 给 出 提 示 ) :q! 强 制 退 出 vi( 对 修 改 过 的 文 件 不 作 保 存 ) :wq 存 盘 后 退 出 :w [filename] 另 存 一 个 名 为 filename 的 文 件 :set nu :set nonu 显 示 行 号, 设 定 之 后, 会 在 每 一 行 的 前 面 显 示 对 应 行 号 取 消 行 号 显 示 注 意 vim 是 vi 的 升 级 版, 与 vi 相 比 扩 展 了 很 多 功 能 且 保 持 与 vi 的 90% 相 兼 容, 感 兴 趣 的 读 者 可 以 查 看 相 关 资 料 进 行 学 习 初 探 emacs 正 如 前 面 所 述,vi 是 一 款 功 能 非 常 强 大 的 编 辑 器, 它 能 够 方 便 快 捷 高 效 地 完 成 用 户 的 任 务, 那 么, 在 此 再 次 向 读 者 介 绍 另 一 款 编 辑 器 是 否 多 此 一 举 呢? 答 案 是 否 定 的 因 为 emacs 不 仅 仅 是 一 款 功 能 强 大 的 编 译 器, 而 且 是 一 款 融 合 编 辑 编 译 调 试 于 一 体 的 开 发 环 境 虽 然, 它 没 有 Visual Studio 一 样 绚 丽 的 界 面, 但 是 它 可 以 在 没 有 图 形 显 示 的 终 端 环 境 下 出 色 的 工 作, 相 信 追 求 强 大 功 能 和 工 作 效 率 的 用 户 不 会 介 意 它 朴 素 的 界 面 的 emacs 的 使 用 和 vi 截 然 不 同 在 emacs 里, 没 有 类 似 于 vi 的 3 种 模 式 emacs 只 有 一 种 模 式, 也 就 是 编 辑 模 式, 而 且 它 的 命 令 全 靠 功 能 键 完 成 因 此, 功 能 键 也 就 相 当 重 要 了 但 emacs 却 还 使 用 一 个 不 同 vi 的 模 式, 它 的 模 式 是 指 各 种 辅 助 环 境 比 如, 当 编 辑 普 通 文 本 时, 使 用 的 是 文 本 模 式 (Text Mode), 而 当 写 程 序 时, 使 用 的 则 是 如 c 模 式 shell 模 式 等 境 下 面, 首 先 介 绍 一 下 emacs 作 为 编 辑 器 的 使 用 方 法, 以 帮 助 读 者 熟 悉 emacs 的 环 注 意 emacs 缩 写 注 释 : C+<chr> 表 示 按 住 Ctrl 键 的 同 时 键 入 字 符 <chr> 因 此,C+f 就 表 示 按 住 Ctrl 键 同 时 键 入 f M+<chr> 表 示 当 键 入 字 符 <chr> 时 同 时 按 住 Meta 或 Edit 或 Alt 键 ( 通 常 为 Alt 键 ) 1.emacs 安 装 现 在 较 新 版 本 的 Linux( 如 本 书 中 所 用 的 Red Hat Enterprise 4 AS) 的 安 装 光 盘 中 一 般 都 自 带 有 emacs 的 安 装 包, 用 户 可 以 通 过 安 装 光 盘 进 行 安 装 ( 一 般 在 第 2 张 光 盘 中 ) 2. 启 动 emacs 安 装 完 emacs 之 后, 只 需 在 命 令 行 键 入 emacs [ 文 件 名 ] ( 若 缺 省 文 件 名, 也 可 在 emacs 编 辑 文 件 后 另 存 时 指 定 ), 也 可 从 编 程 emacs 打 开, 如 3.5 图 所 示 的 就 是 从 编 程 emacs 打 开 的 emacs 欢 迎 界 面
9 图 3.5 emacs 欢 迎 界 面 接 着 可 单 击 任 意 键 进 入 emacs 的 工 作 窗 口, 如 图 3.6 所 示 从 图 中 可 见,emacs 的 工 作 窗 口 分 为 上 下 两 个 部 分, 上 部 为 编 辑 窗 口, 底 部 为 命 令 显 示 窗 口, 用 户 执 行 功 能 键 的 功 能 都 会 在 底 部 有 相 应 的 显 示, 有 时 也 需 要 用 户 在 底 部 窗 口 输 入 相 应 的 命 令, 如 查 找 字 符 串 等 图 3.6 emacs 的 工 作 窗 口
10 3. 进 入 emacs 在 进 入 emacs 后, 即 可 进 行 文 件 的 编 辑 由 于 emacs 只 有 一 种 编 辑 模 式, 因 此 用 户 无 需 进 行 模 式 间 的 切 换 下 面 介 绍 emacs 中 基 本 编 辑 功 能 键 (1) 移 动 光 标 虽 然 在 emacs 中 可 以 使 用 上 下 左 右 方 向 键 来 移 动 单 个 字 符, 但 笔 者 还 是 建 议 读 者 学 习 其 对 应 功 能 键, 因 为 它 们 不 仅 能 在 所 有 类 型 的 终 端 上 工 作, 而 且 读 者 将 会 发 现 在 熟 练 使 用 之 后, 输 入 这 些 Ctrl 加 字 符 会 比 按 方 向 键 快 很 多 表 3.3 列 举 了 emacs 中 光 标 移 动 的 常 见 功 能 键 表 3.3 emacs 光 标 移 动 功 能 键 功 能 键 功 能 功 能 键 功 能 C-f 向 前 移 动 一 个 字 符 M-b 向 后 移 动 一 个 单 词 C-b 向 后 移 动 一 个 字 符 C-a 移 动 到 行 首 C-p 移 动 到 上 一 行 C-e 移 动 到 行 尾 C-n 移 动 到 下 一 行 M-<(M 加 小 于 号 ) 移 动 光 标 到 整 个 文 本 的 开 头 M-f 向 前 移 动 一 个 单 词 M->(M 加 大 于 号 ) 移 动 光 标 到 整 个 文 本 的 末 尾 (2) 剪 切 和 粘 贴 在 emacs 中 可 以 使 用 Delete 和 BackSpace 删 除 光 标 前 后 的 字 符, 这 和 用 户 之 前 的 习 惯 一 致, 在 此 就 不 赘 述 以 词 和 行 为 单 位 的 剪 切 和 粘 贴 功 能 键 如 表 3.4 所 示 表 3.4 emacs 剪 切 和 粘 贴 功 能 键 功 能 功 能 键 功 能 M-Delete 剪 切 光 标 前 面 的 单 词 M-k 剪 切 从 光 标 位 置 到 句 尾 的 内 容 M-d 剪 切 光 标 前 面 的 单 词 C-y 将 缓 冲 区 中 的 内 容 粘 贴 到 光 标 所 在 的 位 置 C-k 剪 切 从 光 标 位 置 到 行 尾 的 内 容 C-x u 撤 销 操 作 ( 先 操 作 C+x, 接 着 再 单 击 u) 注 意 在 emacs 中 对 单 个 字 符 的 操 作 是 删 除, 而 对 词 和 句 的 操 作 是 剪 切, 即 保 存 在 缓 冲 区 中, 以 备 后 面 的 粘 贴 所 用 (3) 复 制 文 本 在 emacs 中 的 复 制 文 本 包 括 两 步 : 选 择 复 制 区 域 和 粘 贴 文 本 选 择 复 制 区 域 的 方 法 是 : 首 先 在 复 制 起 始 点 (A) 按 下 C-Space 或 C-@(C-Shift-2) 使 它 成 为 一 个 标 识 点, 再 将 光 标 移 至 复 制 结 束 点 ( B ), 再 按 下 M-w, 就 可 将 A 与 B 之 间 的 文 本 复 制 到 系 统 的 缓 冲 区 中 再 使 用 功 能 键 C-y 将 其 粘 贴 到 指 定 位 置 (4) 查 找 文 本
11 查 找 文 本 的 功 能 键 如 表 3.5 所 示 表 3.5 emacs 查 找 文 本 功 能 键 功 能 键 功 能 C-s C-r 查 找 光 标 以 后 的 内 容, 并 在 对 话 框 的 I-search: 后 输 入 要 查 找 的 字 符 串 查 找 光 标 以 前 的 内 容, 并 在 对 话 框 的 I-search backward: 后 输 入 要 查 找 的 字 符 串 (5) 保 存 文 档 在 emacs 中 保 存 文 档 的 功 能 键 为 C+x C+s ( 即 先 操 作 C+x, 接 着 再 操 作 C+s), 这 时, 屏 幕 底 下 的 对 话 框 会 出 现 如 Wrote /root/workplace/editor/why 的 字 样, 如 图 3.7 所 示 图 3.7 emacs 中 保 存 文 档 另 外,emacs 在 编 辑 时 会 为 每 个 文 件 提 供 自 动 保 存 (auto save) 的 机 制, 而 且 自 动 保 存 的 文 件 的 文 件 名 前 后 都 有 一 个 #, 例 如, 编 辑 名 为 hello.c 的 文 件, 其 自 动 保 存 的 文 件 的 文 件 名 就 叫 #hello.c# 当 用 户 正 常 地 保 存 了 文 件 后,emacs 就 会 删 除 这 个 自 动 保 存 的 文 件 这 个 机 制 当 系 统 发 生 异 常 时 非 常 有 用 (6) 退 出 文 档 在 emacs 中 退 出 文 档 的 功 能 键 为 C-x C-c 4.emacs 中 的 模 式 emacs 不 仅 仅 是 个 强 大 的 编 译 器, 它 还 是 一 个 集 编 译 调 试 等 于 一 体 的 工 作 环 境 在 这 里, 读 者 将 会 了 解 到 emacs 作 为 编 译 器 的 最 基 本 的 概 念, 感 兴 趣 的 读 者 可 以 参 考 Learning GNU Emacs,Second Edition 一 书 进 一 步 学 习 emacs
12 在 emacs 中 并 没 有 像 vi 中 那 样 的 命 令 行 编 辑 模 式, 只 有 一 种 编 辑 模 式 这 里 所 说 的 模 式 是 指 emacs 里 的 各 种 辅 助 环 境 下 面 着 重 讲 解 C 模 式 当 我 们 启 动 某 一 文 件 时,emacs 会 判 断 文 件 的 类 型, 从 而 自 动 选 择 相 应 的 模 式 当 然, 用 户 也 可 以 手 动 启 动 各 种 模 式, 用 功 能 键 M-x, 然 后 再 输 入 模 式 的 名 称, 如 图 3.8 所 示, 这 样 就 启 动 了 C 模 式 图 3.8 emacs 中 选 择 模 式 在 强 大 的 C 模 式 下, 用 户 拥 有 自 动 缩 进 注 释 预 处 理 扩 展 自 动 状 态 等 强 大 功 能 在 C 模 式 下 编 辑 代 码 时, 可 以 用 Tab 键 自 动 地 将 当 前 行 的 代 码 产 生 适 当 的 缩 进, 使 代 码 结 构 清 晰 美 观, 它 也 可 以 指 定 缩 进 的 规 则 源 代 码 要 有 良 好 的 可 读 性, 必 须 要 有 良 好 的 注 释 在 emacs 中, 用 M- 可 以 产 生 一 条 右 缩 进 的 注 释 C 模 式 下 是 /* comments */ 形 式 的 注 释,C++ 模 式 下 是 // comments 形 式 的 注 释 当 用 户 高 亮 选 定 某 段 文 本, 然 后 操 作 C-c C-c, 就 可 以 注 释 该 段 文 字 emacs 还 可 以 使 用 C 预 处 理 其 运 行 代 码 的 一 部 分, 以 便 让 程 序 员 检 测 宏 条 件 编 译 以 及 include 语 句 的 效 果 5.emacs 编 译 调 试 程 序 emacs 可 以 让 程 序 员 在 emacs 环 境 里 编 译 自 己 的 软 件 此 时, 编 辑 器 把 编 译 器 的 输 出 和 程 序 代 码 连 接 起 来 程 序 员 可 以 像 使 用 Windows 的 其 他 开 发 工 具 一 样, 将 出 错 位 置 和 代 码 定 位 联 系 起 来 emacs 默 认 的 编 辑 命 令 是 对 一 个 make( 在 本 章 3.6 节 中 会 详 细 介 绍 ) 的 调 用 用 户 可 以 打 开 tool 下 的 Compile 进 行 查 看 emacs 可 以 支 持 大 量 的 工 程 项 目, 以 方 便 程 序 员 的 开 发 另 外,emacs 为 gdb 调 试 器 提 供 了 一 个 功 能 齐 全 的 接 口 在 emacs 中 使 用 gdb 的 时 候, 程 序 员 不 仅 能 够 获 得 gdb 的 全 部 标 准 特 性, 还 可 以 获 得 通 过 接 口 增 强 而 产 生 的
13 其 他 性 能 嵌 入 式 Linux 应 用 程 序 开 发 标 准 教 程 第 3 章 Linux 下 C 编 程 基 础 3.3 gcc 编 译 器 GNU CC( 简 称 为 gcc) 是 GNU 项 目 中 符 合 ANSI C 标 准 的 编 译 系 统, 能 够 编 译 用 C C++ 和 Object C 等 语 言 编 写 的 程 序 gcc 不 仅 功 能 强 大, 而 且 可 以 编 译 如 C C++ Object C Java Fortran Pascal Modula-3 和 Ada 等 多 种 语 言, 而 且 gcc 是 一 个 交 叉 平 台 编 译 器, 它 能 够 在 当 前 CPU 平 台 上 为 多 种 不 同 体 系 结 构 的 硬 件 平 台 开 发 软 件, 因 此 尤 其 适 合 在 嵌 入 式 领 域 的 开 发 编 译 本 章 中 的 示 例, 除 非 特 别 注 明, 否 则 均 采 用 4.x.x 的 gcc 版 本 表 3.6 所 示 为 gcc 支 持 编 译 源 文 件 的 后 缀 及 其 解 释 表 3.6 gcc 所 支 持 后 缀 名 解 释 后 缀 名 所 对 应 的 语 言 后 缀 名 所 对 应 的 语 言.c C 原 始 程 序.s/.S 汇 编 语 言 原 始 程 序.C/.cc/.cxx C++ 原 始 程 序.h 预 处 理 文 件 ( 头 文 件 ).m Objective-C 原 始 程 序.o 目 标 文 件.i 已 经 过 预 处 理 的 C 原 始 程 序.a/.so 编 译 后 的 库 文 件.ii 已 经 过 预 处 理 的 C++ 原 始 程 序 gcc 编 译 流 程 解 析 如 本 章 开 头 提 到 的,gcc 的 编 译 流 程 分 为 了 4 个 步 骤, 分 别 为 : 预 处 理 (Pre-Processing); 编 译 (Compiling); 汇 编 (Assembling); 链 接 (Linking) 下 面 就 具 体 来 查 看 一 下 gcc 是 如 何 完 成 以 上 4 个 步 骤 的 首 先 看 一 下 hello.c 的 源 代 码 : #include <stdio.h> int main() { } printf("hello! This is our embedded world!\n"); return 0; (1) 预 处 理 阶 段 在 该 阶 段, 对 包 含 的 头 文 件 (#include) 和 宏 定 义 (#define #ifdef 等 ) 进 行 处 理 在 上 述 代 码 的 预 处 理 过 程 中, 编 译 器 将 包 含 的 头 文 件 stdio.h 编 译 进 来, 并 且 用 户 可 以 使 用 gcc 的 选 项 -E 进 行 查 看, 该 选 项 的 作 用 是 让 gcc 在 预 处 理 结 束 后 停 止 编 译 过
14 程 注 意 嵌 入 式 Linux 应 用 程 序 开 发 标 准 教 程 第 3 章 Linux 下 C 编 程 基 础 gcc 指 令 的 一 般 格 式 为 :gcc [ 选 项 ] 要 编 译 的 文 件 [ 选 项 ] [ 目 标 文 件 ] 其 中, 目 标 文 件 可 缺 省,gcc 默 认 生 成 可 执 行 的 文 件, 名 为 : 编 译 文 件.out [root@localhost gcc]# gcc E hello.c o hello.i 在 此 处, 选 项 -o 是 指 目 标 文 件, 由 表 3.6 可 知,.i 文 件 为 已 经 过 预 处 理 的 C 程 序 以 下 列 出 了 hello.i 文 件 的 部 分 内 容 : typedef int (* gconv_trans_fct) (struct gconv_step *, struct gconv_step_data *, void *, const unsigned char *, const unsigned char **, const unsigned char *, unsigned char **, size_t *); # 2 "hello.c" 2 int main() { } printf("hello! This is our embedded world!\n"); return 0; 由 此 可 见,gcc 确 实 进 行 了 预 处 理, 它 把 stdio.h 的 内 容 插 入 hello.i 文 件 中 (2) 编 译 阶 段 接 下 来 进 行 的 是 编 译 阶 段, 在 这 个 阶 段 中,gcc 首 先 要 检 查 代 码 的 规 范 性 是 否 有 语 法 错 误 等, 以 确 定 代 码 实 际 要 做 的 工 作, 在 检 查 无 误 后,gcc 把 代 码 翻 译 成 汇 编 语 言 用 户 可 以 使 用 -S 选 项 来 进 行 查 看, 该 选 项 只 进 行 编 译 而 不 进 行 汇 编, 结 果 生 成 汇 编 代 码 [root@localhost gcc]# gcc S hello.i o hello.s 以 下 列 出 了 hello.s 的 内 容, 可 见 gcc 已 经 将 其 转 化 为 汇 编 代 码 了, 感 兴 趣 的 读 者 可 以 分 析 一 下 这 一 个 简 单 的 C 语 言 小 程 序 是 如 何 用 汇 编 代 码 实 现 的.LC0:.file "hello.c".section.rodata.align 4.string.text.globl main.type main: pushl %ebp movl %esp, %ebp "Hello! This is our embedded world!"
15 subl $8, %esp andl $-16, %esp movl $0, %eax addl $15, %eax addl $15, %eax shrl $4, %eax sall $4, %eax subl %eax, %esp subl $12, %esp pushl $.LC0 call puts addl $16, %esp movl $0, %eax leave ret.size main,.-main.ident "GCC: (GNU) XYZ19 (Red Hat (3) 汇 编 阶 段 汇 编 阶 段 是 把 编 译 阶 段 生 成 的.s 文 件 转 成 目 标 文 件, 读 者 在 此 使 用 选 项 -c 就 可 看 到 汇 编 代 码 已 转 化 为.o 的 二 进 制 目 标 代 码 了, 如 下 所 示 : [root@localhost gcc]# gcc c hello.s o hello.o (4) 链 接 阶 段 在 成 功 编 译 之 后, 就 进 入 了 链 接 阶 段 这 里 涉 及 一 个 重 要 的 概 念 : 函 数 库 读 者 可 以 重 新 查 看 这 个 小 程 序, 在 这 个 程 序 中 并 没 有 定 义 printf 的 函 数 实 现, 且 在 预 编 译 中 包 含 进 的 stdio.h 中 也 只 有 该 函 数 的 声 明, 而 没 有 定 义 函 数 的 实 现, 那 么, 是 在 哪 里 实 现 printf 函 数 的 呢? 最 后 的 答 案 是 : 系 统 把 这 些 函 数 的 实 现 都 放 到 名 为 libc.so.6 的 库 文 件 中 去 了, 在 没 有 特 别 指 定 时,gcc 会 到 系 统 默 认 的 搜 索 路 径 /usr/lib 下 进 行 查 找, 也 就 是 链 接 到 libc.so.6 函 数 库 中 去, 这 样 就 能 调 用 函 数 printf 了, 而 这 也 正 是 链 接 的 作 用 函 数 库 有 静 态 库 和 动 态 库 两 种 静 态 库 是 指 编 译 链 接 时, 将 库 文 件 的 代 码 全 部 加 入 可 执 行 文 件 中, 因 此 生 成 的 文 件 比 较 大, 但 在 运 行 时 也 就 不 再 需 要 库 文 件 了 其 后 缀 名 通 常 为.a 动 态 库 与 之 相 反, 在 编 译 链 接 时 并 没 有 将 库 文 件 的 代 码 加 入 可 执 行 文 件 中, 而 是 在 程 序 执 行 时 加 载 库, 这 样 可 以 节 省 系 统 的 开 销 一 般 动 态 库 的 后 缀 名 为.so, 如 前 面 所 述 的 libc.so.6 就 是 动 态 库 gcc 在 编 译 时 默 认 使 用 动 态 库 完 成 了 链 接 之 后,gcc 就 可 以 生 成 可 执 行 文 件, 如 下 所 示 [root@localhost gcc]# gcc hello.o o hello 运 行 该 可 执 行 文 件, 出 现 的 正 确 结 果 如 下
16 gcc]#./hello Hello! This is our embedded world! gcc 编 译 选 项 分 析 gcc 有 超 过 100 个 可 用 选 项, 主 要 包 括 总 体 选 项 告 警 和 出 错 选 项 优 化 选 项 和 体 系 结 构 相 关 选 项 以 下 对 每 一 类 中 最 常 用 的 选 项 进 行 讲 解 (1) 常 用 选 项 gcc 的 常 用 选 项 如 表 3.7 所 示, 很 多 在 前 面 的 示 例 中 已 经 有 所 涉 及 表 3.7 gcc 常 用 选 项 列 表 选 项 含 义 -c 只 编 译 不 链 接, 生 成 目 标 文 件.o -S 只 编 译 不 汇 编, 生 成 汇 编 代 码 -E 只 进 行 预 编 译, 不 做 其 他 处 理 -g 在 可 执 行 程 序 中 包 含 标 准 调 试 信 息 -o file 将 file 文 件 指 定 为 输 出 文 件 -v 打 印 出 编 译 器 内 部 编 译 各 过 程 的 命 令 行 信 息 和 编 译 器 的 版 本 -I dir 在 头 文 件 的 搜 索 路 径 列 表 中 添 加 dir 目 录 前 一 小 节 已 经 讲 解 了 -c -E -o -S 选 项 的 使 用 方 法, 在 此 主 要 讲 解 另 外 2 个 非 常 常 用 的 库 依 赖 选 项 -I dir -I dir 正 如 上 表 中 所 述, -I dir 选 项 可 以 在 头 文 件 的 搜 索 路 径 列 表 中 添 加 dir 目 录 由 于 Linux 中 头 文 件 都 默 认 放 到 了 /usr/include/ 目 录 下, 因 此, 当 用 户 希 望 添 加 放 置 在 其 他 位 置 的 头 文 件 时, 就 可 以 通 过 -I dir 选 项 来 指 定, 这 样,gcc 就 会 到 相 应 的 位 置 查 找 对 应 的 目 录 比 如 在 /root/workplace/gcc 下 有 两 个 文 件 : /* hello1.c */ #include<my.h> int main() { } printf("hello!!\n"); return 0; /* my.h */ #include<stdio.h> 这 样, 就 可 在 gcc 命 令 行 中 加 入 -I 选 项 : [root@localhost gcc] gcc hello1.c I /root/workplace/gcc/ -o hello1 这 样,gcc 就 能 够 执 行 出 正 确 结 果
17 小 知 识 嵌 入 式 Linux 应 用 程 序 开 发 标 准 教 程 第 3 章 Linux 下 C 编 程 基 础 在 include 语 句 中, <> 表 示 在 标 准 路 径 中 搜 索 头 文 件, 表 示 在 本 目 录 中 搜 索 故 在 上 例 中, 可 把 hello1.c 的 #include<my.h> 改 为 #include my.h 就 不 需 要 加 上 -I 选 项 了 (2) 库 选 项 gcc 库 选 项 如 表 3.8 所 示 表 3.8 gcc 库 选 项 列 表 选 项 含 义 -static -shared 进 行 静 态 编 译, 即 链 接 静 态 库, 禁 止 使 用 动 态 库 1. 可 以 生 成 动 态 库 文 件 2. 进 行 动 态 编 译, 尽 可 能 地 链 接 动 态 库, 只 有 当 没 有 动 态 库 时 才 会 链 接 同 名 的 静 态 库 ( 默 认 选 项, 即 可 省 略 ) -L dir 在 库 文 件 的 搜 索 路 径 列 表 中 添 加 dir 目 录 -lname -fpic( 或 -fpic) 链 接 称 为 libname.a( 静 态 库 ) 或 者 libname.so( 动 态 库 ) 的 库 文 件 若 两 个 库 都 存 在 则 根 据 编 译 方 式 (-static 还 是 -shared) 而 进 行 链 接 生 成 使 用 相 对 地 址 的 位 置 无 关 的 目 标 代 码 (Position Independent Code) 然 后 通 常 使 用 gcc 的 -static 选 项 从 该 PIC 目 标 文 件 生 成 动 态 库 文 件 我 们 通 常 需 要 将 一 些 常 用 的 公 共 函 数 编 译 并 集 成 到 二 进 制 文 件 (Linux 的 ELF 格 式 文 件 ), 以 便 其 他 程 序 可 重 复 地 使 用 该 文 件 中 的 函 数, 此 时 将 这 种 文 件 叫 做 函 数 库, 使 用 函 数 库 不 仅 能 够 节 省 很 多 内 存 和 存 储 器 的 空 间 资 源, 而 且 更 重 要 的 是 大 大 降 低 开 发 难 度 和 开 销, 提 高 开 发 效 率 并 增 强 程 序 的 结 构 性 实 际 上, 在 Linux 中 的 每 个 程 序 都 会 链 接 到 一 个 或 者 多 个 库 比 如 使 用 C 函 数 的 程 序 会 链 接 到 C 运 行 时 库,Qt 应 用 程 序 会 链 接 到 Qt 支 持 的 相 关 图 形 库 等 函 数 库 有 静 态 库 和 动 态 库 两 种, 静 态 库 是 一 系 列 的 目 标 文 件 (.o 文 件 ) 的 归 档 文 件 ( 文 件 名 格 式 为 libname.a), 如 果 在 编 译 某 个 程 序 时 链 接 静 态 库, 则 链 接 器 将 会 搜 索 静 态 库, 从 中 提 取 出 它 所 需 要 的 目 标 文 件 并 直 接 复 制 到 该 程 序 的 可 执 行 二 进 制 文 件 (ELF 格 式 文 件 ) 之 中 ; 动 态 库 ( 文 件 名 格 式 为 libname.so[. 主 版 本 号. 次 版 本 号. 发 行 号 ]) 在 程 序 编 译 时 并 不 会 被 链 接 到 目 标 代 码 中, 而 是 在 程 序 运 行 时 才 被 载 入 下 面 举 一 个 简 单 的 例 子, 讲 解 如 何 怎 么 创 建 和 使 用 这 两 种 函 数 库 首 先 创 建 unsgn_pow.c 文 件, 它 包 含 unsgn_pow() 函 数 的 定 义, 具 体 代 码 如 下 所 示 /* unsgn_pow.c: 库 程 序 */ unsigned long long unsgn_pow(unsigned int x, unsigned int y) { unsigned long long res = 1; if (y == 0) { res = 1; } else if (y == 1)
18 } 嵌 入 式 Linux 应 用 程 序 开 发 标 准 教 程 第 3 章 Linux 下 C 编 程 基 础 { res = x; } else { res = x * unsgn_pow(x, y - 1); } return res; 然 后 创 建 pow_test.c 文 件, 它 会 调 用 unsgn_pow() 函 数 /* pow_test.c */ #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { unsigned int x, y; unsigned long long res; if ((argc < 3) (sscanf(argv[1], "%u", &x)!= 1) (sscanf(argv[2], "%u", &y))!= 1) { printf("usage: pow base exponent\n"); exit(1); } res = unsgn_pow(x, y); printf("%u ^ %u = %u\n", x, y, res); exit(0); } 我 们 用 unsgn_pow.c 文 件 可 以 制 作 一 个 函 数 库 下 面 分 别 讲 解 怎 么 生 成 静 态 库 和 动 态 库 静 态 库 的 创 建 和 使 用 创 建 静 态 库 比 较 简 单, 使 用 归 档 工 具 ar 将 一 些 目 标 文 件 集 成 在 一 起 [root@localhost lib]# gcc -c unsgn_pow.c [root@localhost lib]# ar rcsv libpow.a unsgn_pow.o a - unsgn_pow.o 下 面 编 译 主 程 序, 它 将 会 链 接 到 刚 生 成 的 静 态 库 libpow.a 具 体 运 行 结 果 如 下 所 示 [root@localhost lib]# gcc -o pow_test pow_test.c -L. lpow
19 lib]#./pow_test ^ 10 = 1024 其 中, 选 项 -L dir 的 功 能 与 -I dir 类 似, 能 够 在 库 文 件 的 搜 索 路 径 列 表 中 添 加 dir 目 录, 而 -lname 选 项 指 示 编 译 时 链 接 到 库 文 件 libname.a 或 者 libname.so 本 实 例 中, 程 序 pow_test.c 需 要 使 用 当 前 目 录 下 的 一 个 静 态 库 libpow.a 动 态 库 的 创 建 和 使 用 首 先 使 用 gcc 的 -fpic 选 项 为 动 态 库 构 造 一 个 目 标 文 件 [root@localhost lib]# gcc -fpic -Wall -c unsgn_pow.c 接 下 来, 使 用 -shared 选 项 和 已 创 建 的 位 置 无 关 目 标 代 码, 生 成 一 个 动 态 库 libpow.so [root@localhost lib]# gcc -shared -o libpow.so unsgn_pow.o 下 面 编 译 主 程 序, 它 将 会 链 接 到 刚 生 成 的 动 态 库 libpow.so [root@localhost lib]# gcc -o pow_test pow_test.c -L. lpow 在 运 行 可 执 行 程 序 之 前, 需 要 注 册 动 态 库 的 路 径 名 其 方 法 有 几 种 : 修 改 /etc/ld.so.conf 文 件, 或 者 修 改 LD_LIBRARY_PATH 环 境 变 量, 或 者 将 库 文 件 直 接 复 制 到 /lib 或 者 /usr/lib 目 录 下 ( 这 两 个 目 录 为 系 统 的 默 认 的 库 路 径 名 ) [root@localhost lib]# cp libpow.so /lib [root@localhost lib]#./pow_test ^ 10 = 1024 动 态 库 只 有 当 使 用 它 的 程 序 执 行 时 才 被 链 接 使 用, 而 不 是 将 需 要 的 部 分 直 接 编 译 入 可 执 行 文 件 中, 并 且 一 个 动 态 库 可 以 被 多 个 程 序 使 用 故 可 称 为 共 享 库, 而 静 态 库 将 会 整 合 到 程 序 中, 因 此 在 程 序 执 行 时 不 用 加 载 静 态 库 从 而 可 知, 链 接 到 静 态 库 会 使 用 户 的 程 序 臃 肿, 并 且 难 以 升 级, 但 是 可 能 会 比 较 容 易 部 署 而 链 接 到 动 态 库 会 使 用 户 的 程 序 轻 便, 并 且 易 于 升 级, 但 是 会 难 以 部 署 (3) 告 警 和 出 错 选 项 gcc 的 告 警 和 出 错 选 项 如 表 3.9 所 示 表 3.9 gcc 警 告 和 出 错 选 项 选 项 列 表 选 项 含 义 -ansi -pedantic -pedantic-error 支 持 符 合 ANSI 标 准 的 C 程 序 允 许 发 出 ANSI C 标 准 所 列 的 全 部 警 告 信 息 允 许 发 出 ANSI C 标 准 所 列 的 全 部 错 误 信 息 -w 关 闭 所 有 告 警 -Wall -werror 允 许 发 出 gcc 提 供 的 所 有 有 用 的 报 警 信 息 把 所 有 的 告 警 信 息 转 化 为 错 误 信 息, 并 在 告 警 发 生 时 终 止 编 译 过 程 下 面 结 合 实 例 对 这 几 个 告 警 和 出 错 选 项 进 行 简 单 的 讲 解 有 以 下 程 序 段 :
20 #include<stdio.h> 嵌 入 式 Linux 应 用 程 序 开 发 标 准 教 程 第 3 章 Linux 下 C 编 程 基 础 void main() { } long long tmp = 1; printf("this is a bad code!\n"); return 0; 这 是 一 个 很 糟 糕 的 程 序, 读 者 可 以 考 虑 一 下 有 哪 些 问 题 -ansi 该 选 项 强 制 gcc 生 成 标 准 语 法 所 要 求 的 告 警 信 息, 尽 管 这 还 并 不 能 保 证 所 有 没 有 警 告 的 程 序 都 是 符 合 ANSI C 标 准 的 运 行 结 果 如 下 所 示 : [root@localhost gcc]# gcc ansi warning.c o warning warning.c: 在 函 数 main 中 : warning.c:7 警 告 : 在 无 返 回 值 的 函 数 中, return 带 返 回 值 warning.c:4 警 告 : main 的 返 回 类 型 不 是 int 可 以 看 出, 该 选 项 并 没 有 发 现 long long 这 个 无 效 数 据 类 型 的 错 误 -pedantic 打 印 ANSI C 标 准 所 列 出 的 全 部 警 告 信 息, 同 样 也 保 证 所 有 没 有 警 告 的 程 序 都 是 符 合 ANSI C 标 准 的 其 运 行 结 果 如 下 所 示 : 误 [root@localhost gcc]# gcc pedantic warning.c o warning warning.c: 在 函 数 main 中 : warning.c:5 警 告 :ISO C90 不 支 持 long long warning.c:7 警 告 : 在 无 返 回 值 的 函 数 中, return 带 返 回 值 warning.c:4 警 告 : main 的 返 回 类 型 不 是 int 可 以 看 出, 使 用 该 选 项 查 出 了 long long 这 个 无 效 数 据 类 型 的 错 误 -Wall 打 印 gcc 能 够 提 供 的 所 有 有 用 的 报 警 信 息 该 选 项 的 运 行 结 果 如 下 所 示 : [root@localhost gcc]# gcc Wall warning.c o warning warning.c:4 警 告 : main 的 返 回 类 型 不 是 int warning.c: 在 函 数 main 中 : warning.c:7 警 告 : 在 无 返 回 值 的 函 数 中, return 带 返 回 值 warning.c:5 警 告 : 未 使 用 的 变 量 tmp 使 用 -Wall 选 项 找 出 了 未 使 用 的 变 量 tmp, 但 它 并 没 有 找 出 无 效 数 据 类 型 的 错 另 外,gcc 还 可 以 利 用 选 项 对 单 独 的 常 见 错 误 分 别 指 定 警 告 (4) 优 化 选 项 gcc 可 以 对 代 码 进 行 优 化, 它 通 过 编 译 选 项 -On 来 控 制 优 化 代 码 的 生 成, 其 中
21 n 是 一 个 代 表 优 化 级 别 的 整 数 对 于 不 同 版 本 的 gcc 来 讲,n 的 取 值 范 围 及 其 对 应 的 优 化 效 果 可 能 并 不 完 全 相 同, 比 较 典 型 的 范 围 是 从 0 变 化 到 2 或 3 不 同 的 优 化 级 别 对 应 不 同 的 优 化 处 理 工 作 如 使 用 优 化 选 项 -O 主 要 进 行 线 程 跳 转 (Thread Jump) 和 延 迟 退 栈 (Deferred Stack Pops) 两 种 优 化 使 用 优 化 选 项 -O2 除 了 完 成 所 有 -O1 级 别 的 优 化 之 外, 同 时 还 要 进 行 一 些 额 外 的 调 整 工 作, 如 处 理 器 指 令 调 度 等 选 项 -O3 则 还 包 括 循 环 展 开 和 其 他 一 些 与 处 理 器 特 性 相 关 的 优 化 工 作 虽 然 优 化 选 项 可 以 加 速 代 码 的 运 行 速 度, 但 对 于 调 试 而 言 将 是 一 个 很 大 的 挑 战 因 为 代 码 在 经 过 优 化 之 后, 原 先 在 源 程 序 中 声 明 和 使 用 的 变 量 很 可 能 不 再 使 用, 控 制 流 也 可 能 会 突 然 跳 转 到 意 外 的 地 方, 循 环 语 句 也 有 可 能 因 为 循 环 展 开 而 变 得 到 处 都 有, 所 有 这 些 对 调 试 来 讲 都 将 是 一 场 噩 梦 所 以 笔 者 建 议 在 调 试 的 时 候 最 好 不 使 用 任 何 优 化 选 项, 只 有 当 程 序 在 最 终 发 行 的 时 候 才 考 虑 对 其 进 行 优 化 (5) 体 系 结 构 相 关 选 项 gcc 的 体 系 结 构 相 关 选 项 如 表 3.10 所 示 表 3.10 gcc 体 系 结 构 相 关 选 项 列 表 选 项 含 义 -mcpu=type -mieee-fp -mno-ieee-fp -msoft-float -mshort -mrtd 针 对 不 同 的 CPU 使 用 相 应 的 CPU 指 令 可 选 择 的 type 有 i386 i486 pentium 及 i686 使 用 IEEE 标 准 进 行 浮 点 数 的 比 较 不 使 用 IEEE 标 准 进 行 浮 点 数 的 比 较 输 出 包 含 浮 点 库 调 用 的 目 标 代 码 把 int 类 型 作 为 16 位 处 理, 相 当 于 short int 强 行 将 函 数 参 数 个 数 固 定 的 函 数 用 ret NUM 返 回, 节 省 调 用 函 数 的 一 条 指 令 这 些 体 系 结 构 相 关 选 项 在 嵌 入 式 的 设 计 中 会 有 较 多 的 应 用, 读 者 需 根 据 不 同 体 系 结 构 将 对 应 的 选 项 进 行 组 合 处 理 在 本 书 后 面 涉 及 具 体 实 例 时 将 会 有 针 对 性 的 讲 解 3.4 gdb 调 试 器 调 试 是 所 有 程 序 员 都 会 面 临 的 问 题 如 何 提 高 程 序 员 的 调 试 效 率, 更 好 更 快 地 定 位 程 序 中 的 问 题 从 而 加 快 程 序 开 发 的 进 度, 是 大 家 都 很 关 注 的 问 题 就 如 读 者 熟 知 的 Windows 下 的 一 些 调 试 工 具, 如 Visual Studio 自 带 的 设 置 断 点 单 步 跟 踪 等, 都 受 到 了 广 大 用 户 的 赞 赏 那 么, 在 Linux 下 有 什 么 很 好 的 调 试 工 具 呢? gdb 调 试 器 是 一 款 GNU 开 发 组 织 并 发 布 的 UNIX/Linux 下 的 程 序 调 试 工 具 虽 然, 它 没 有 图 形 化 的 友 好 界 面, 但 是 它 强 大 的 功 能 也 足 以 与 微 软 的 Visual Studio 等 工 具 媲 美 下 面 就 请 跟 随 笔 者 一 步 步 学 习 gdb 调 试 器 gdb 使 用 流 程 这 里 给 出 了 一 个 短 小 的 程 序, 由 此 带 领 读 者 熟 悉 gdb 的 使 用 流 程 建 议 读 者 能 够
22 动 手 实 际 操 作 一 下 首 先, 打 开 Linux 下 的 编 辑 器 vi 或 者 emacs, 编 辑 如 下 代 码 ( 由 于 为 了 更 好 地 熟 悉 gdb 的 操 作, 笔 者 在 此 使 用 vi 编 辑, 希 望 读 者 能 够 参 见 3.3 节 中 对 vi 的 介 绍, 并 熟 练 使 用 vi) /*test.c*/ #include <stdio.h> int sum(int m); int main() { int i, n = 0; sum(50); for(i = 1; i<= 50; i++) { n += i; } printf("the sum of 1-50 is %d \n", n ); } int sum(int m) { int i, n = 0; for (i = 1; i <= m; i++) { n += i; printf("the sum of 1-m is %d\n", n); } } 在 保 存 退 出 后 首 先 使 用 gcc 对 test.c 进 行 编 译, 注 意 一 定 要 加 上 选 项 -g, 这 样 编 译 出 的 可 执 行 代 码 中 才 包 含 调 试 信 息, 否 则 之 后 gdb 无 法 载 入 该 可 执 行 文 件 [root@localhost gdb]# gcc -g test.c -o test 虽 然 这 段 程 序 没 有 错 误, 但 调 试 完 全 正 确 的 程 序 可 以 更 加 了 解 gdb 的 使 用 流 程 接 下 来 就 启 动 gdb 进 行 调 试 注 意,gdb 进 行 调 试 的 是 可 执 行 文 件, 而 不 是 如.c 的 源 代 码, 因 此, 需 要 先 通 过 gcc 编 译 生 成 可 执 行 文 件 才 能 用 gdb 进 行 调 试 [root@localhost gdb]# gdb test GNU gdb Red Hat Linux ( rh) Copyright 2004 Free Software Foundation, Inc. GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain
23 conditions. Type "show copying" to see the conditions. There is absolutely no warranty for GDB. Type "show warranty" for details. This GDB was configured as "i386-redhat-linux-gnu"...using host libthread_db library "/lib/libthread_db.so.1". (gdb) 可 以 看 出, 在 gdb 的 启 动 画 面 中 指 出 了 gdb 的 版 本 号 使 用 的 库 文 件 等 信 息, 接 下 来 就 进 入 了 由 ( gdb) 开 头 的 命 令 行 界 面 了 (1) 查 看 文 件 在 gdb 中 键 入 l ( list) 就 可 以 查 看 所 载 入 的 文 件, 如 下 所 示 注 意 在 gdb 的 命 令 中 都 可 使 用 缩 略 形 式 的 命 令, 如 l 代 表 list, b 代 表 breakpoint, p 代 表 print 等, 读 者 也 可 使 用 help 命 令 查 看 帮 助 信 息 (gdb) l 1 #include <stdio.h> 2 int sum(int m); 3 int main() 4 { 5 int i,n = 0; 6 sum(50); 7 for(i = 1; i <= 50; i++) 8 { 9 n += i; 10 } (gdb) l 11 printf("the sum of 1~50 is %d \n", n ); } 14 int sum(int m) 15 { 16 int i, n = 0; 17 for(i = 1; i <= m; i++) 18 { 19 n += i; 20 } 21 printf("the sum of 1~m is = %d\n", n); 20 } 可 以 看 出,gdb 列 出 的 源 代 码 中 明 确 地 给 出 了 对 应 的 行 号, 这 样 就 可 以 大 大 地 方 便 代 码 的 定 位 (2) 设 置 断 点
24 设 置 断 点 是 调 试 程 序 中 一 个 非 常 重 要 的 手 段, 它 可 以 使 程 序 运 行 到 一 定 位 置 时 暂 停 因 此, 程 序 员 在 该 位 置 处 可 以 方 便 地 查 看 变 量 的 值 堆 栈 情 况 等, 从 而 找 出 代 码 的 症 结 所 在 在 gdb 中 设 置 断 点 非 常 简 单, 只 需 在 b 后 加 入 对 应 的 行 号 即 可 ( 这 是 最 常 用 的 方 式, 另 外 还 有 其 他 方 式 设 置 断 点 ), 如 下 所 示 : (gdb) b 6 Breakpoint 1 at 0x804846d: file test.c, line 6. 要 注 意 的 是, 在 gdb 中 利 用 行 号 设 置 断 点 是 指 代 码 运 行 到 对 应 行 之 前 将 其 停 止, 如 上 例 中, 代 码 运 行 到 第 6 行 之 前 暂 停 ( 并 没 有 运 行 第 6 行 ) (3) 查 看 断 点 情 况 在 设 置 完 断 点 之 后, 用 户 可 以 键 入 info b 来 查 看 设 置 断 点 情 况, 在 gdb 中 可 以 设 置 多 个 断 点 (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x d in main at test.c:6 用 户 在 断 点 键 入 backrace ( 只 输 入 bt 即 可 ) 可 以 查 到 调 用 函 数 ( 堆 栈 ) 的 情 况, 这 个 功 能 在 程 序 调 试 之 中 使 用 非 常 广 泛, 经 常 用 于 排 除 错 误 或 者 监 视 调 用 堆 栈 的 情 况 行 */ (gdb) b 19 (gdb) c Breakpoin 2, sum(m=50) at test.c:19 19 printf( The sum of 1-m is %d\n, n); (gdb) bt #0 sum(m=50) at test.c:19 /* 停 在 test.c 的 sum() 函 数, 第 19 #1 0x080483e8 in main() at test.c:6 /* test.c 的 第 6 行 调 用 sum 函 数 */ (4) 运 行 代 码 接 下 来 就 可 运 行 代 码 了,gdb 默 认 从 首 行 开 始 运 行 代 码, 键 入 r ( run) 即 可 ( 若 想 从 程 序 中 指 定 行 开 始 运 行, 可 在 r 后 面 加 上 行 号 ) (gdb) r Starting program: /root/workplace/gdb/test Reading symbols from shared object read from target memory...done. Loaded system supplied DSO at 0x5fb000 Breakpoint 1, main () at test.c:6 6 sum(50); 可 以 看 到, 程 序 运 行 到 断 点 处 就 停 止 了
25 (5) 查 看 变 量 值 在 程 序 停 止 运 行 之 后, 程 序 员 所 要 做 的 工 作 是 查 看 断 点 处 的 相 关 变 量 值 在 gdb 中 键 入 p + 变 量 值 即 可, 如 下 所 示 : (gdb) p n $1 = 0 (gdb) p i $2 = 在 此 处, 为 什 么 变 量 i 的 值 为 如 此 奇 怪 的 一 个 数 字 呢? 原 因 就 在 于 程 序 是 在 断 点 设 置 的 对 应 行 之 前 停 止 的, 那 么 在 此 时, 并 没 有 把 i 的 数 值 赋 为 零, 而 只 是 一 个 随 机 的 数 字 但 变 量 n 是 在 第 4 行 赋 值 的, 故 在 此 时 已 经 为 零 小 技 巧 gdb 在 显 示 变 量 值 时 都 会 在 对 应 值 之 前 加 上 $N 标 记, 它 是 当 前 变 量 值 的 引 用 标 记, 所 以 以 后 若 想 再 次 引 用 此 变 量 就 可 以 直 接 写 作 $N, 而 无 需 写 冗 长 的 变 量 名 (6) 单 步 运 行 单 步 运 行 可 以 使 用 命 令 n ( next) 或 s ( step), 它 们 之 间 的 区 别 在 于 : 若 有 函 数 调 用 的 时 候, s 会 进 入 该 函 数 而 n 不 会 进 入 该 函 数 因 此, s 就 类 似 于 Uisual 等 工 具 中 的 step in, n 类 似 与 Uisual 等 工 具 中 的 step over 它 们 的 使 用 如 下 所 示 : (gdb) n The sum of 1-m is for (i = 1; i <= 50; i++) (gdb) s sum (m=50) at test.c:16 16 int i, n = 0; 可 见, 使 用 n 后, 程 序 显 示 函 数 sum() 的 运 行 结 果 并 向 下 执 行, 而 使 用 s 后 则 进 入 sum() 函 数 之 中 单 步 运 行 (7) 恢 复 程 序 运 行 在 查 看 完 所 需 变 量 及 堆 栈 情 况 后, 就 可 以 使 用 命 令 c ( continue) 恢 复 程 序 的 正 常 运 行 了 这 时, 它 会 把 剩 余 还 未 执 行 的 程 序 执 行 完, 并 显 示 剩 余 程 序 中 的 执 行 结 果 以 下 是 之 前 使 用 n 命 令 恢 复 后 的 执 行 结 果 : (gdb) c Continuing. The sum of 1-50 is :1275 Program exited with code 031. 可 以 看 出, 程 序 在 运 行 完 后 退 出, 之 后 程 序 处 于 停 止 状 态
26 小 知 识 嵌 入 式 Linux 应 用 程 序 开 发 标 准 教 程 第 3 章 Linux 下 C 编 程 基 础 在 gdb 中, 程 序 的 运 行 状 态 有 运 行 暂 停 和 停 止 3 种, 其 中 暂 停 状 态 为 程 序 遇 到 了 断 点 或 观 察 点 之 类 的, 程 序 暂 时 停 止 运 行, 而 此 时 函 数 的 地 址 函 数 参 数 函 数 内 的 局 部 变 量 都 会 被 压 入 栈 (Stack) 中 故 在 这 种 状 态 下 可 以 查 看 函 数 的 变 量 值 等 各 种 属 性 但 在 函 数 处 于 停 止 状 态 之 后, 栈 就 会 自 动 撤 消, 它 也 就 无 法 查 看 各 种 信 息 了 gdb 基 本 命 令 gdb 的 命 令 可 以 通 过 查 看 help 进 行 查 找, 由 于 gdb 的 命 令 很 多, 因 此 gdb 的 help 将 其 分 成 了 很 多 种 类 (class), 用 户 可 以 通 过 进 一 步 查 看 相 关 class 找 到 相 应 命 令, 如 下 所 示 : (gdb) help List of classes of commands: aliases -- Aliases of other commands breakpoints -- Making program stop at certain points data -- Examining data files -- Specifying and examining files internals -- Maintenance commands Type "help"followedbyaclassnameforalistofcommandsinthatclass. Type "help" followed by command name for full documentation. Command name abbreviations are allowed if unambiguous. 上 述 列 出 了 gdb 各 个 分 类 的 命 令, 注 意 底 部 的 加 粗 部 分 说 明 其 为 分 类 命 令 接 下 来 可 以 具 体 查 找 各 分 类 的 命 令, 如 下 所 示 : (gdb) help data Examining data. List of commands: call -- Call a function in the program delete display -- Cancel some expressions to be displayed when program stops delete mem -- Delete memory region disabledisplay--disablesomeexpressionstobedisplayedwhenprogram stops Type "help" followed by command name for full documentation. Command name abbreviations are allowed if unambiguous.
27 若 用 户 想 要 查 找 call 命 令, 就 可 键 入 help call (gdb) help call Call a function in the program. The argument is the function name and arguments, in the notation of the current working language. The result is printed and saved in the value history, if it is not void. 当 然, 若 用 户 已 知 命 令 名, 直 接 键 入 help [command] 也 是 可 以 的 gdb 中 的 命 令 主 要 分 为 以 下 几 类 : 工 作 环 境 相 关 命 令 设 置 断 点 与 恢 复 命 令 源 代 码 查 看 命 令 查 看 运 行 数 据 相 关 命 令 及 修 改 运 行 参 数 命 令 以 下 就 分 别 对 这 几 类 命 令 进 行 讲 解 1. 工 作 环 境 相 关 命 令 gdb 中 不 仅 可 以 调 试 所 运 行 的 程 序, 而 且 还 可 以 对 程 序 相 关 的 工 作 环 境 进 行 相 应 的 设 定, 甚 至 还 可 以 使 用 shell 中 的 命 令 进 行 相 关 的 操 作, 其 功 能 极 其 强 大 gdb 常 见 工 作 环 境 相 关 命 令 如 表 3.11 所 示 表 3.11 gdb 工 作 环 境 相 关 命 令 命 令 格 式 含 义 set args 运 行 时 的 参 数 指 定 运 行 时 参 数, 如 set args 2 show args 查 看 设 置 好 的 运 行 参 数 Path dir 设 定 程 序 的 运 行 路 径 show paths 查 看 程 序 的 运 行 路 径 set environment var [=value] 设 置 环 境 变 量 show environment [var] 查 看 环 境 变 量 cd dir 进 入 dir 目 录, 相 当 于 shell 中 的 cd 命 令 Pwd 显 示 当 前 工 作 目 录 shell command 运 行 shell 的 command 命 令 2. 设 置 断 点 与 恢 复 命 令 gdb 中 设 置 断 点 与 恢 复 的 常 见 命 令 如 表 3.12 所 示 表 3.12 gdb 设 置 断 点 与 恢 复 相 关 命 令 命 令 格 式 含 义 Info b break [ 文 件 名 :] 行 号 或 函 数 名 < 条 件 表 达 式 > tbreak [ 文 件 名 :] 行 号 或 函 数 名 < 条 件 表 达 式 > delete [ 断 点 号 ] 查 看 所 设 断 点 设 置 断 点 设 置 临 时 断 点, 到 达 后 被 自 动 删 除 删 除 指 定 断 点, 其 断 点 号 为 info b 中 的 第 一 栏 若 缺 省 断 点 号 则 删 除 所 有 断 点
28 disable [ 断 点 号 ] enable [ 断 点 号 ] condition [ 断 点 号 ] < 条 件 表 达 式 > ignore [ 断 点 号 ]<num> Step Next Finish C 停 止 指 定 断 点, 使 用 info b 仍 能 查 看 此 断 点 同 delete 一 样, 若 缺 省 断 点 号 则 停 止 所 有 断 点 激 活 指 定 断 点, 即 激 活 被 disable 停 止 的 断 点 修 改 对 应 断 点 的 条 件 在 程 序 执 行 中, 忽 略 对 应 断 点 num 次 单 步 恢 复 程 序 运 行, 且 进 入 函 数 调 用 单 步 恢 复 程 序 运 行, 但 不 进 入 函 数 调 用 运 行 程 序, 直 到 当 前 函 数 完 成 返 回 继 续 执 行 函 数, 直 到 函 数 结 束 或 遇 到 新 的 断 点 设 置 断 点 在 gdb 的 调 试 中 非 常 重 要, 下 面 着 重 讲 解 gdb 中 设 置 断 点 的 方 法 gdb 中 设 置 断 点 有 多 种 方 式 : 其 一 是 按 行 设 置 断 点 ; 另 外 还 可 以 设 置 函 数 断 点 和 条 件 断 点 下 面 具 体 介 绍 后 两 种 设 置 断 点 的 方 法 1 函 数 断 点 gdb 中 按 函 数 设 置 断 点 只 需 把 函 数 名 列 在 命 令 b 之 后, 如 下 所 示 : (gdb) b test.c:sum ( 可 以 简 化 为 b sum) Breakpoint 1 at 0x80484ba: file test.c, line 16. (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x080484ba in sum at test.c:16 要 注 意 的 是, 此 时 的 断 点 实 际 是 在 函 数 的 定 义 处, 也 就 是 在 16 行 处 ( 注 意 第 16 行 还 未 执 行 ) 2 条 件 断 点 gdb 中 设 置 条 件 断 点 的 格 式 为 :b 行 数 或 函 数 名 if 表 达 式 具 体 实 例 如 下 所 示 : (gdb) b 8 if i==10 Breakpoint 1 at 0x804848c: file test.c, line 8. (gdb) info b Num Type Disp Enb Address What 1 breakpoint keep y 0x c in main at test.c:8 stop only if i == 10 (gdb) r Starting program: /home/yul/test The sum of 1-m is 1275 Breakpoint 1, main () at test.c:9 9 n += i; (gdb) p i $1 = 10
29 可 以 看 到, 该 例 中 在 第 8 行 ( 也 就 是 运 行 完 第 7 行 的 for 循 环 ) 设 置 了 一 个 i==0 的 条 件 断 点, 在 程 序 运 行 之 后 可 以 看 出, 程 序 确 实 在 i 为 10 时 暂 停 运 行 3.gdb 中 源 码 查 看 相 关 命 令 在 gdb 中 可 以 查 看 源 码 以 方 便 其 他 操 作, 它 的 常 见 相 关 命 令 如 表 3.13 所 示 表 3.13 gdb 源 码 查 看 相 关 相 关 命 令 命 令 格 式 含 义 list < 行 号 > < 函 数 名 > file [ 文 件 名 ] forward-search 正 则 表 达 式 reverse-search 正 则 表 达 式 dir DIR show directories info line 查 看 指 定 位 置 代 码 加 载 指 定 文 件 源 代 码 的 前 向 搜 索 源 代 码 的 后 向 搜 索 将 路 径 DIR 添 加 到 源 文 件 搜 索 的 路 径 的 开 头 显 示 源 文 件 的 当 前 搜 索 路 径 显 示 加 载 到 gdb 内 存 中 的 代 码 4.gdb 中 查 看 运 行 数 据 相 关 命 令 gdb 中 查 看 运 行 数 据 是 指 当 程 序 处 于 运 行 或 暂 停 状 态 时, 可 以 查 看 的 变 量 及 表 达 式 的 信 息, 其 常 见 命 令 如 表 3.14 所 示 表 3.14 gdb 查 看 运 行 数 据 相 关 命 令 命 令 格 式 含 义 print 表 达 式 变 量 x <n/f/u> display 表 达 式 backtrace 查 看 程 序 运 行 时 对 应 表 达 式 和 变 量 的 值 查 看 内 存 变 量 内 容 其 中 n 为 整 数 表 示 显 示 内 存 的 长 度,f 表 示 显 示 的 格 式,u 表 示 从 当 前 地 址 往 后 请 求 显 示 的 字 节 数 设 定 在 单 步 运 行 或 其 他 情 况 中, 自 动 显 示 的 对 应 表 达 式 的 内 容 查 看 当 前 栈 的 情 况, 即 可 以 查 到 哪 些 被 调 用 的 函 数 尚 未 返 回 5.gdb 中 修 改 运 行 参 数 相 关 命 令 gdb 还 可 以 修 改 运 行 时 的 参 数, 并 使 该 变 量 按 照 用 户 当 前 输 入 的 值 继 续 运 行 它 的 设 置 方 法 为 : 在 单 步 执 行 的 过 程 中, 键 入 命 令 set 变 量 = 设 定 值 这 样, 在 此 之 后, 程 序 就 会 按 照 该 设 定 的 值 运 行 了 下 面, 笔 者 结 合 上 一 节 的 代 码 将 n 的 初 始 值 设 为 4, 其 代 码 如 下 所 示 : (gdb) b 7 Breakpoint 5 at 0x804847a: file test.c, line 7. (gdb) r Starting program: /home/yul/test
30 The sum of 1-m is 1275 嵌 入 式 Linux 应 用 程 序 开 发 标 准 教 程 第 3 章 Linux 下 C 编 程 基 础 Breakpoint 5, main () at test.c:7 7 for(i=1; i <= 50; i++) (gdb) set n=4 (gdb) c Continuing. The sum of 1-50 is 1279 Program exited with code 031. 可 以 看 到, 最 后 的 运 行 结 果 确 实 比 之 前 的 值 大 了 4 注 意 gdb 使 用 时 的 注 意 点 : 在 gcc 编 译 选 项 中 一 定 要 加 入 -g 只 有 在 代 码 处 于 运 行 或 暂 停 状 态 时 才 能 查 看 变 量 值 设 置 断 点 后 程 序 在 指 定 行 之 前 停 止 3.5 make 工 程 管 理 器 到 此 为 止, 读 者 已 经 了 解 了 如 何 在 Linux 下 使 用 编 辑 器 编 写 代 码, 如 何 使 用 gcc 把 代 码 编 译 成 可 执 行 文 件, 还 学 习 了 如 何 使 用 gdb 来 调 试 程 序, 那 么, 所 有 的 工 作 看 似 已 经 完 成 了, 为 什 么 还 需 要 make 这 个 工 程 管 理 器 呢? 所 谓 工 程 管 理 器, 顾 名 思 义, 是 用 于 管 理 较 多 的 文 件 读 者 可 以 试 想 一 下, 由 成 百 上 千 个 文 件 构 成 的 项 目, 如 果 其 中 只 有 一 个 或 少 数 几 个 文 件 进 行 了 修 改, 按 照 之 前 所 学 的 gcc 编 译 工 具, 就 不 得 不 把 这 所 有 的 文 件 重 新 编 译 一 遍, 因 为 编 译 器 并 不 知 道 哪 些 文 件 是 最 近 更 新 的, 而 只 知 道 需 要 包 含 这 些 文 件 才 能 把 源 代 码 编 译 成 可 执 行 文 件, 于 是, 程 序 员 就 不 得 不 重 新 输 入 数 目 如 此 庞 大 的 文 件 名 以 完 成 最 后 的 编 译 工 作 编 译 过 程 分 为 编 译 汇 编 链 接 阶 段, 其 中 编 译 阶 段 仅 检 查 语 法 错 误 以 及 函 数 与 变 量 是 否 被 正 确 地 声 明 了, 在 链 接 阶 段 则 主 要 完 成 函 数 链 接 和 全 局 变 量 的 链 接 因 此, 那 些 没 有 改 动 的 源 代 码 根 本 不 需 要 重 新 编 译, 而 只 要 把 它 们 重 新 链 接 进 去 就 可 以 了 所 以, 人 们 就 希 望 有 一 个 工 程 管 理 器 能 够 自 动 识 别 更 新 了 的 文 件 代 码, 而 不 需 要 重 复 输 入 冗 长 的 命 令 行, 这 样,make 工 程 管 理 器 就 应 运 而 生 了 实 际 上,make 工 程 管 理 器 也 就 是 个 自 动 编 译 管 理 器, 这 里 的 自 动 是 指 它 能 够 根 据 文 件 时 间 戳 自 动 发 现 更 新 过 的 文 件 而 减 少 编 译 的 工 作 量, 同 时, 它 通 过 读 入 makefile 文 件 的 内 容 来 执 行 大 量 的 编 译 工 作 用 户 只 需 编 写 一 次 简 单 的 编 译 语 句 就 可 以 了 它 大 大 提 高 了 实 际 项 目 的 工 作 效 率, 而 且 几 乎 所 有 Linux 下 的 项 目 编 程 均 会 涉 及 它, 希 望 读 者 能 够 认 真 学 习 本 节 内 容
31 3.5.1 makefile 基 本 结 构 makefile 是 make 读 入 的 惟 一 配 置 文 件, 因 此 本 节 的 内 容 实 际 就 是 讲 述 makefile 的 编 写 规 则 在 一 个 makefile 中 通 常 包 含 如 下 内 容 : 需 要 由 make 工 具 创 建 的 目 标 体 (target), 通 常 是 目 标 文 件 或 可 执 行 文 件 ; 要 创 建 的 目 标 体 所 依 赖 的 文 件 (dependency_file); 创 建 每 个 目 标 体 时 需 要 运 行 的 命 令 (command), 这 一 行 必 须 以 制 表 符 (tab 键 ) 开 头 它 的 格 式 为 : target: dependency_files command /* 该 行 必 须 以 tab 键 开 头 */ 例 如, 有 两 个 文 件 分 别 为 hello.c 和 hello.h, 创 建 的 目 标 体 为 hello.o, 执 行 的 命 令 为 gcc 编 译 指 令 :gcc c hello.c, 那 么, 对 应 的 makefile 就 可 以 写 为 : #The simplest example hello.o: hello.c hello.h gcc c hello.c o hello.o 接 着 就 可 以 使 用 make 了 使 用 make 的 格 式 为 :make target, 这 样 make 就 会 自 动 读 入 makefile( 也 可 以 是 首 字 母 大 写 的 Makefile) 并 执 行 对 应 target 的 command 语 句, 并 会 找 到 相 应 的 依 赖 文 件 如 下 所 示 : 体 [root@localhost makefile]# make hello.o gcc c hello.c o hello.o [root@localhost makefile]# ls hello.c hello.h hello.o makefile 可 以 看 到,makefile 执 行 了 hello.o 对 应 的 命 令 语 句, 并 生 成 了 hello.o 目 标 注 意 在 makefile 中 的 每 一 个 command 前 必 须 有 Tab 符, 否 则 在 运 行 make 命 令 时 会 出 错 makefile 变 量 上 面 示 例 的 makefile 在 实 际 中 是 几 乎 不 存 在 的, 因 为 它 过 于 简 单, 仅 包 含 两 个 文 件 和 一 个 命 令, 在 这 种 情 况 下 完 全 不 必 要 编 写 makefile 而 只 需 在 shell 中 直 接 输 入 即 可, 在 实 际 中 使 用 的 makefile 往 往 是 包 含 很 多 的 文 件 和 命 令 的, 这 也 是 makefile 产 生 的 原 因 下 面 就 可 给 出 稍 微 复 杂 一 些 的 makefile 进 行 讲 解 david:kang.o yul.o gcc kang.o bar.o -o myprog kang.o : kang.c kang.h head.h gcc Wall O -g c kang.c -o kang.o yul.o : bar.c head.h
32 gcc - Wall O -g c yul.c -o yul.o 在 这 个 makefile 中 有 3 个 目 标 体 (target), 分 别 为 david kang.o 和 yul.o, 其 中 第 一 个 目 标 体 的 依 赖 文 件 就 是 后 两 个 目 标 体 如 果 用 户 使 用 命 令 make david, 则 make 管 理 器 就 是 找 到 david 目 标 体 开 始 执 行 这 时,make 会 自 动 检 查 相 关 文 件 的 时 间 戳 首 先, 在 检 查 kang.o yul.o 和 david 3 个 文 件 的 时 间 戳 之 前, 它 会 向 下 查 找 那 些 把 kang.o 或 yul.o 作 为 目 标 文 件 的 时 间 戳 比 如, kang.o 的 依 赖 文 件 为 kang.c kang.h head.h 如 果 这 些 文 件 中 任 何 一 个 的 时 间 戳 比 kang.o 新, 则 命 令 gcc Wall O -g c kang.c -o kang.o 将 会 执 行, 从 而 更 新 文 件 kang.o 在 更 新 完 kang.o 或 yul.o 之 后, make 会 检 查 最 初 的 kang.o yul.o 和 david 3 个 文 件, 只 要 文 件 kang.o 或 yul.o 中 的 至 少 有 一 个 文 件 的 时 间 戳 比 david 新, 则 第 二 行 命 令 就 会 被 执 行 这 样,make 就 完 成 了 自 动 检 查 时 间 戳 的 工 作, 开 始 执 行 编 译 工 作 这 也 就 是 make 工 作 的 基 本 流 程 接 下 来, 为 了 进 一 步 简 化 编 辑 和 维 护 makefile,make 允 许 在 makefile 中 创 建 和 使 用 变 量 变 量 是 在 makefile 中 定 义 的 名 字, 用 来 代 替 一 个 文 本 字 符 串, 该 文 本 字 符 串 称 为 该 变 量 的 值 在 具 体 要 求 下, 这 些 值 可 以 代 替 目 标 体 依 赖 文 件 命 令 以 及 makefile 文 件 中 其 他 部 分 在 makefile 中 的 变 量 定 义 有 两 种 方 式 : 一 种 是 递 归 展 开 方 式, 另 一 种 是 简 单 方 式 递 归 展 开 方 式 定 义 的 变 量 是 在 引 用 该 变 量 时 进 行 替 换 的, 即 如 果 该 变 量 包 含 了 对 其 他 变 量 的 引 用, 则 在 引 用 该 变 量 时 一 次 性 将 内 嵌 的 变 量 全 部 展 开, 虽 然 这 种 类 型 的 变 量 能 够 很 好 地 完 成 用 户 的 指 令, 但 是 它 也 有 严 重 的 缺 点, 如 不 能 在 变 量 后 追 加 内 容 ( 因 为 语 句 :CFLAGS = $(CFLAGS) -O 在 变 量 扩 展 过 程 中 可 能 导 致 无 穷 循 环 ) 为 了 避 免 上 述 问 题, 简 单 扩 展 型 变 量 的 值 在 定 义 处 展 开, 并 且 只 展 开 一 次, 因 此 它 不 包 含 任 何 对 其 他 变 量 的 引 用, 从 而 消 除 变 量 的 嵌 套 引 用 递 归 展 开 方 式 的 定 义 格 式 为 :VAR=var 简 单 扩 展 方 式 的 定 义 格 式 为 :VAR:=var make 中 的 变 量 使 用 均 使 用 的 格 式 为 :$(VAR) 注 意 变 量 名 是 不 包 括 : # = 以 及 结 尾 空 格 的 任 何 字 符 串 同 时, 变 量 名 中 包 含 字 母 数 字 以 及 下 划 线 以 外 的 情 况 应 尽 量 避 免, 因 为 它 们 可 能 在 将 来 被 赋 予 特 别 的 含 义 变 量 名 是 大 小 写 敏 感 的, 例 如 变 量 名 foo FOO 和 Foo 代 表 不 同 的 变 量 推 荐 在 makefile 内 部 使 用 小 写 字 母 作 为 变 量 名, 预 留 大 写 字 母 作 为 控 制 隐 含 规 则 参 数 或 用 户 重 载 命 令 选 项 参 数 的 变 量 名 下 面 给 出 了 上 例 中 用 变 量 替 换 修 改 后 的 makefile, 这 里 用 OBJS 代 替 kang.o 和 yul.o, 用 CC 代 替 gcc, 用 CFLAGS 代 替 -Wall -O g 这 样 在 以 后 修 改 时, 就 可 以 只 修 改 变 量 定 义, 而 不 需 要 修 改 下 面 的 定 义 实 体, 从 而 大 大 简 化 了 makefile 维 护 的 工
33 作 量 经 变 量 替 换 后 的 makefile 如 下 所 示 : OBJS = kang.o yul.o CC = gcc CFLAGS = -Wall -O -g david : $(OBJS) $(CC) $(OBJS) -o david kang.o : kang.c kang.h $(CC) $(CFLAGS) -c kang.c -o kang.o yul.o : yul.c yul.h $(CC) $(CFLAGS) -c yul.c -o yul.o 可 以 看 到, 此 处 变 量 是 以 递 归 展 开 方 式 定 义 的 makefile 中 的 变 量 分 为 用 户 自 定 义 变 量 预 定 义 变 量 自 动 变 量 及 环 境 变 量 如 上 例 中 的 OBJS 就 是 用 户 自 定 义 变 量, 自 定 义 变 量 的 值 由 用 户 自 行 设 定, 而 预 定 义 变 量 和 自 动 变 量 为 通 常 在 makefile 都 会 出 现 的 变 量, 它 们 的 一 部 分 有 默 认 值, 也 就 是 常 见 的 设 定 值, 当 然 用 户 可 以 对 其 进 行 修 改 预 定 义 变 量 包 含 了 常 见 编 译 器 汇 编 器 的 名 称 及 其 编 译 选 项 表 3.15 列 出 了 makefile 中 常 见 预 定 义 变 量 及 其 部 分 默 认 值 表 3.15 makefile 中 常 见 的 预 定 义 变 量 预 定 义 变 量 含 义 AR AS CC 库 文 件 维 护 程 序 的 名 称, 默 认 值 为 ar 汇 编 程 序 的 名 称, 默 认 值 为 as C 编 译 器 的 名 称, 默 认 值 为 cc CPP C 预 编 译 器 的 名 称, 默 认 值 为 $(CC) E CXX FC C++ 编 译 器 的 名 称, 默 认 值 为 g++ Fortran 编 译 器 的 名 称, 默 认 值 为 f77 RM 文 件 删 除 程 序 的 名 称, 默 认 值 为 rm f ARFLAGS ASFLAGS CFLAGS CPPFLAGS CXXFLAGS FFLAGS 库 文 件 维 护 程 序 的 选 项, 无 默 认 值 汇 编 程 序 的 选 项, 无 默 认 值 C 编 译 器 的 选 项, 无 默 认 值 C 预 编 译 的 选 项, 无 默 认 值 C++ 编 译 器 的 选 项, 无 默 认 值 Fortran 编 译 器 的 选 项, 无 默 认 值 可 以 看 出, 上 例 中 的 CC 和 CFLAGS 是 预 定 义 变 量, 其 中 由 于 CC 没 有 采 用 默 认 值, 因 此, 需 要 把 CC=gcc 明 确 列 出 来 由 于 常 见 的 gcc 编 译 语 句 中 通 常 包 含 了 目 标 文 件 和 依 赖 文 件, 而 这 些 文 件 在
34 makefile 文 件 中 目 标 体 所 在 行 已 经 有 所 体 现, 因 此, 为 了 进 一 步 简 化 makefile 的 编 写, 就 引 入 了 自 动 变 量 自 动 变 量 通 常 可 以 代 表 编 译 语 句 中 出 现 目 标 文 件 和 依 赖 文 件 等, 并 且 具 有 本 地 含 义 ( 即 下 一 语 句 中 出 现 的 相 同 变 量 代 表 的 是 下 一 语 句 的 目 标 文 件 和 依 赖 文 件 ) 表 3.16 列 出 了 makefile 中 常 见 的 自 动 变 量 表 3.16 makefile 中 常 见 的 自 动 变 量 自 动 变 量 含 义 $* 不 包 含 扩 展 名 的 目 标 文 件 名 称 $+ 所 有 的 依 赖 文 件, 以 空 格 分 开, 并 以 出 现 的 先 后 为 序, 可 能 包 含 重 复 的 依 赖 文 件 $< 第 一 个 依 赖 文 件 的 名 称 $? 所 有 时 间 戳 比 目 标 文 件 晚 的 依 赖 文 件, 并 以 空 格 分 开 $@ 目 标 文 件 的 完 整 名 称 $^ 所 有 不 重 复 的 依 赖 文 件, 以 空 格 分 开 $% 如 果 目 标 是 归 档 成 员, 则 该 变 量 表 示 目 标 的 归 档 成 员 名 称 自 动 变 量 的 书 写 比 较 难 记, 但 是 在 熟 练 了 之 后 使 用 会 非 常 方 便, 请 读 者 结 合 下 例 中 的 自 动 变 量 改 写 的 makefile 进 行 记 忆 OBJS = kang.o yul.o CC = gcc CFLAGS = -Wall -O -g david : $(OBJS) $(CC) $^ -o $@ kang.o : kang.c kang.h $(CC) $(CFLAGS) -c $< -o $@ yul.o : yul.c yul.h $(CC) $(CFLAGS) -c $< -o $@ 另 外, 在 makefile 中 还 可 以 使 用 环 境 变 量 使 用 环 境 变 量 的 方 法 相 对 比 较 简 单, make 在 启 动 时 会 自 动 读 取 系 统 当 前 已 经 定 义 了 的 环 境 变 量, 并 且 会 创 建 与 之 具 有 相 同 名 称 和 数 值 的 变 量 但 是, 如 果 用 户 在 makefile 中 定 义 了 相 同 名 称 的 变 量, 那 么 用 户 自 定 义 变 量 将 会 覆 盖 同 名 的 环 境 变 量 makefile 规 则 makefile 的 规 则 是 make 进 行 处 理 的 依 据, 它 包 括 了 目 标 体 依 赖 文 件 及 其 之 间 的 命 令 语 句 在 上 面 的 例 子 中, 都 显 式 地 指 出 了 makefile 中 的 规 则 关 系, 如 $(CC) $(CFLAGS) -c $< -o $@, 但 为 了 简 化 makefile 的 编 写,make 还 定 义 了 隐 式 规 则 和 模 式 规 则, 下 面 就 分 别 对 其 进 行 讲 解 1. 隐 式 规 则 隐 含 规 则 能 够 告 诉 make 怎 样 使 用 传 统 的 规 则 完 成 任 务, 这 样, 当 用 户 使 用 它 们
35 时 就 不 必 详 细 指 定 编 译 的 具 体 细 节, 而 只 需 把 目 标 文 件 列 出 即 可 make 会 自 动 搜 索 隐 式 规 则 目 录 来 确 定 如 何 生 成 目 标 文 件 如 上 例 就 可 以 写 成 : OBJS = kang.o yul.o CC = gcc CFLAGS = -Wall -O -g david : $(OBJS) $(CC) $^ -o $@ 为 什 么 可 以 省 略 后 两 句 呢? 因 为 make 的 隐 式 规 则 指 出 : 所 有.o 文 件 都 可 自 动 由.c 文 件 使 用 命 令 $(CC) $(CPPFLAGS) $(CFLAGS) -c file.c o file.o 来 生 成 这 样 kang.o 和 yul.o 就 会 分 别 通 过 调 用 $(CC) $(CFLAGS) -c kang.c -o kang.o 和 $(CC) $(CFLAGS) -c yul.c -o yul.o 来 生 成 注 意 在 隐 式 规 则 只 能 查 找 到 相 同 文 件 名 的 不 同 后 缀 名 文 件, 如 kang.o 文 件 必 须 由 kang.c 文 件 生 成 表 3.17 给 出 了 常 见 的 隐 式 规 则 目 录 表 3.17 对 应 语 言 后 缀 名 C 编 译 :.c 变 为.o C++ 编 译 :.cc 或.C 变 为.o Pascal 编 译 :.p 变 为.o Fortran 编 译 :.r 变 为 -o makefile 中 常 见 隐 式 规 则 目 录 隐 式 规 则 $(CC) c $(CPPFLAGS) $(CFLAGS) $(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(PC) -c $(PFLAGS) $(FC) -c $(FFLAGS) 2. 模 式 规 则 模 式 规 则 是 用 来 定 义 相 同 处 理 规 则 的 多 个 文 件 的 它 不 同 于 隐 式 规 则, 隐 式 规 则 仅 仅 能 够 用 make 默 认 的 变 量 来 进 行 操 作, 而 模 式 规 则 还 能 引 入 用 户 自 定 义 变 量, 为 多 个 文 件 建 立 相 同 的 规 则, 从 而 简 化 makefile 的 编 写 模 式 规 则 的 格 式 类 似 于 普 通 规 则, 这 个 规 则 中 的 相 关 文 件 前 必 须 用 % 标 明 使 用 模 式 规 则 修 改 后 的 makefile 的 编 写 如 下 : OBJS = kang.o yul.o CC = gcc CFLAGS = -Wall -O -g david : $(OBJS) %.o : %.c $(CC) $^ -o $@ $(CC) $(CFLAGS) -c $< -o $@ make 管 理 器 的 使 用 使 用 make 管 理 器 非 常 简 单, 只 需 在 make 命 令 的 后 面 键 入 目 标 名 即 可 建 立 指 定 的 目 标, 如 果 直 接 运 行 make, 则 建 立 makefile 中 的 第 一 个 目 标
36 此 外 make 还 有 丰 富 的 命 令 行 选 项, 可 以 完 成 各 种 不 同 的 功 能 表 3.18 列 出 了 常 用 的 make 命 令 行 选 项 表 3.18 make 的 命 令 行 选 项 命 令 格 式 含 义 -C dir 读 入 指 定 目 录 下 的 makefile -f file 读 入 当 前 目 录 下 的 file 文 件 作 为 makefile -I 忽 略 所 有 的 命 令 执 行 错 误 -I dir 指 定 被 包 含 的 makefile 所 在 目 录 -n 只 打 印 要 执 行 的 命 令, 但 不 执 行 这 些 命 令 -p 显 示 make 变 量 数 据 库 和 隐 含 规 则 -s 在 执 行 命 令 时 不 显 示 命 令 -w 如 果 make 在 执 行 过 程 中 改 变 目 录, 则 打 印 当 前 目 录 名 3.6 使 用 autotools 在 上 一 小 节, 读 者 已 经 了 解 到 了 make 项 目 管 理 器 的 强 大 功 能 的 确,makefile 可 以 帮 助 make 完 成 它 的 使 命, 但 要 承 认 的 是, 编 写 makefile 确 实 不 是 一 件 轻 松 的 事, 尤 其 对 于 一 个 较 大 的 项 目 而 言 更 是 如 此 那 么, 有 没 有 一 种 轻 松 的 手 段 生 成 makefile 而 同 时 又 能 让 用 户 享 受 make 的 优 越 性 呢? 本 节 要 讲 的 autotools 系 列 工 具 正 是 为 此 而 设 的, 它 只 需 用 户 输 入 简 单 的 目 标 文 件 依 赖 文 件 文 件 目 录 等 就 可 以 轻 松 地 生 成 makefile 了, 这 无 疑 是 广 大 用 户 所 希 望 的 另 外, 这 些 工 具 还 可 以 完 成 系 统 配 置 信 息 的 收 集, 从 而 可 以 方 便 地 处 理 各 种 移 植 性 的 问 题 也 正 是 基 于 此, 现 在 Linux 上 的 软 件 开 发 一 般 都 用 autotools 来 制 作 makefile, 读 者 在 后 面 的 讲 述 中 就 会 了 解 到 autotools 使 用 流 程 正 如 前 面 所 言,autotools 是 系 列 工 具, 读 者 首 先 要 确 认 系 统 是 否 装 了 以 下 工 具 ( 可 以 用 which 命 令 进 行 查 看 ) 这 样 的 aclocal autoscan autoconf autoheader automake 使 用 autotools 主 要 就 是 利 用 各 个 工 具 的 脚 本 文 件 以 生 成 最 后 的 makefile 其 总 体 流 程 是 使 用 aclocal 生 成 一 个 aclocal.m4 文 件, 该 文 件 主 要 处 理 本 地 的 宏 定 义 ; 改 写 configure.scan 文 件, 并 将 其 重 命 名 为 configure.in, 并 使 用 autoconf 文 件 生 成 configure 文 件
37 接 下 来, 笔 者 将 通 过 一 个 简 单 的 hello.c 例 子 带 领 读 者 熟 悉 autotools 生 成 makefile 的 过 程, 由 于 在 这 过 程 中 会 涉 及 较 多 的 脚 本 文 件, 为 了 更 清 楚 地 了 解 相 互 之 间 的 关 系, 强 烈 建 议 读 者 实 际 动 手 操 作 以 体 会 其 整 个 过 程 1.autoscan 它 会 在 给 定 目 录 及 其 子 目 录 树 中 检 查 源 文 件, 若 没 有 给 出 目 录, 就 在 当 前 目 录 及 其 子 目 录 树 中 进 行 检 查 它 会 搜 索 源 文 件 以 寻 找 一 般 的 移 植 性 问 题 并 创 建 一 个 文 件 configure.scan, 该 文 件 就 是 接 下 来 autoconf 要 用 到 的 configure.in 原 型 如 下 所 示 : [root@localhost automake]# autoscan autom4te: configure.ac: no such file or directory autoscan: /usr/bin/autom4te failed with exit status: 1 [root@localhost automake]# ls autoscan.log configure.scan hello.c 由 上 述 代 码 可 知 autoscan 首 先 会 尝 试 去 读 入 configure.ac ( 同 configure.in 的 配 置 文 件 ) 文 件, 此 时 还 没 有 创 建 该 配 置 文 件, 于 是 它 会 自 动 生 成 一 个 configure.in 的 原 型 文 件 configure.scan 2.autoconf configure.in 是 autoconf 的 脚 本 配 置 文 件, 它 的 原 型 文 件 configure.scan 如 下 所 示 : # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) #The next one is modified by david #AC_INIT(FULL-PACKAGE-NAME,VERSION,BUG-REPORT-ADDRESS) AC_INIT(hello,1.0) # The next one is added by david AM_INIT_AUTOMAKE(hello,1.0) AC_CONFIG_SRCDIR([hello.c]) AC_CONFIG_HEADER([config.h]) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_CONFIG_FILES([makefile])
38 AC_OUTPUT 嵌 入 式 Linux 应 用 程 序 开 发 标 准 教 程 第 3 章 Linux 下 C 编 程 基 础 下 面 对 这 个 脚 本 文 件 进 行 解 释 以 # 号 开 始 的 行 是 注 释 AC_PREREQ 宏 声 明 本 文 件 要 求 的 autoconf 版 本, 如 本 例 使 用 的 版 本 2.59 AC_INIT 宏 用 来 定 义 软 件 的 名 称 和 版 本 等 信 息, 在 本 例 中 省 略 了 BUG-REPORT-ADDRESS, 一 般 为 作 者 的 AM_INIT_AUTOMAKE 是 笔 者 另 加 的, 它 是 automake 所 必 备 的 宏, 使 automake 自 动 生 成 makefile.in, 也 同 前 面 一 样,PACKAGE 是 所 要 产 生 软 件 套 件 的 名 称,VERSION 是 版 本 编 号 AC_CONFIG_SRCDIR 宏 用 来 检 查 所 指 定 的 源 码 文 件 是 否 存 在, 以 及 确 定 源 码 目 录 的 有 效 性 在 此 处 源 码 文 件 为 当 前 目 录 下 的 hello.c AC_CONFIG_HEADER 宏 用 于 生 成 config.h 文 件, 以 便 autoheader 使 用 AC_CONFIG_FILES 宏 用 于 生 成 相 应 的 makefile 文 件 中 间 的 注 释 之 间 可 以 分 别 添 加 用 户 测 试 程 序 测 试 函 数 库 测 试 头 文 件 等 宏 定 义 接 下 来 首 先 运 行 aclocal, 生 成 一 个 aclocal.m4 文 件, 该 文 件 主 要 处 理 本 地 的 宏 定 义 如 下 所 示 : [root@localhost automake]# aclocal 再 接 着 运 行 autoconf, 生 成 configure 可 执 行 文 件 如 下 所 示 : [root@localhost automake]# autoconf [root@localhost automake]# ls aclocal.m4 autom4te.cache autoscan.log configure configure.in hello.c 3.autoheader 接 着 使 用 autoheader 命 令, 它 负 责 生 成 config.h.in 文 件 该 工 具 通 常 会 从 acconfig.h 文 件 中 复 制 用 户 附 加 的 符 号 定 义, 因 为 这 里 没 有 附 加 符 号 定 义, 所 以 不 需 要 创 建 acconfig.h 文 件 如 下 所 示 : [root@localhost automake]# autoheader 4.automake 这 一 步 是 创 建 makefile 很 重 要 的 一 步,automake 要 用 的 脚 本 配 置 文 件 是 makefile.am, 用 户 需 要 自 己 创 建 相 应 的 文 件 之 后,automake 工 具 转 换 成 makefile.in 在 该 例 中, 笔 者 创 建 的 文 件 为 makefile.am, 如 下 所 示 : AUTOMAKE_OPTIONS=foreign bin_programs= hello
39 hello_sources= hello.c 下 面 对 该 脚 本 文 件 的 对 应 项 进 行 解 释 其 中 的 AUTOMAKE_OPTIONS 为 设 置 automake 的 选 项 GNU 对 自 己 发 布 的 软 件 有 严 格 的 规 范, 比 如 必 须 附 带 许 可 证 声 明 文 件 COPYING 等, 否 则 automake 执 行 时 会 报 错 automake 提 供 了 3 种 软 件 等 级 :foreign gnu 和 gnits, 让 用 户 选 择 采 用, 默 认 等 级 为 gnu 在 本 示 例 中 采 用 foreign 等 级, 它 只 检 测 必 须 的 文 件 bin_programs 定 义 要 产 生 的 执 行 文 件 名 如 果 要 产 生 多 个 执 行 文 件, 每 个 文 件 名 用 空 格 隔 开 hello_sources 定 义 hello 这 个 执 行 程 序 所 需 要 的 原 始 文 件 如 果 hello 这 个 程 序 是 由 多 个 原 始 文 件 所 产 生 的, 则 必 须 把 它 所 用 到 的 所 有 原 始 文 件 都 列 出 来, 并 用 空 格 隔 开 例 如 : 若 目 标 体 hello 需 要 hello.c david.c hello.h 三 个 依 赖 文 件, 则 定 义 hello_sources=hello.c david.c hello.h 要 注 意 的 是, 如 果 要 定 义 多 个 执 行 文 件, 则 对 每 个 执 行 程 序 都 要 定 义 相 应 的 file_sources 接 下 来 可 以 使 用 automake 命 令 来 生 成 configure.in 文 件, 在 这 里 使 用 选 项 -a ( 或 者 adding-missing ) 可 以 让 automake 自 动 添 加 一 些 必 需 的 脚 本 文 件 如 下 所 示 : [root@localhost automake]# automake a( 或 者 automake --add-missing) configure.in: installing './install-sh' configure.in: installing './missing' makefile.am: installing 'depcomp' [root@localhost automake]# ls aclocal.m4 autoscan.log configure.in hello.c makefile.am missing autom4te.cache configure depcomp install-sh makefile.in config.h.in 可 以 看 到, 在 automake 之 后 就 可 以 生 成 configure.in 文 件 5. 运 行 configure 在 这 一 步 中, 通 过 运 行 自 动 配 置 设 置 文 件 configure, 把 makefile.in 变 成 了 最 终 的 makefile 如 下 所 示 : [root@localhost automake]#./configure checking for a BSD-compatible install... /usr/bin/install -c checking whether build environment is sane... yes checking for gawk... gawk checking whether make sets $(MAKE)... yes checking for gcc... gcc checking for C compiler default output file name... a.out
40 checking whether the C compiler works... yes checking whether we are cross compiling... no checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether gcc accepts -g... yes checking for gcc option to accept ANSI C... none needed checking for style of include used by make... GNU checking dependency style of gcc... gcc3 configure: creating./config.status config.status: creating makefile config.status: executing depfiles commands 可 以 看 到, 在 运 行 configure 时 收 集 了 系 统 的 信 息, 用 户 可 以 在 configure 命 令 中 对 其 进 行 方 便 的 配 置 在./configure 的 自 定 义 参 数 有 两 种, 一 种 是 开 关 式 (--enable-xxx 或 --disable-xxx), 另 一 种 是 开 放 式, 即 后 面 要 填 入 一 串 字 符 (--with-xxx=yyyy) 参 数 读 者 可 以 自 行 尝 试 其 使 用 方 法 另 外, 读 者 可 以 查 看 同 一 目 录 下 的 config.log 文 件, 以 方 便 调 试 之 用 到 此 为 止,makefile 就 可 以 自 动 生 成 了 回 忆 整 个 步 骤, 用 户 不 再 需 要 定 制 不 同 的 规 则, 而 只 需 要 输 入 简 单 的 文 件 及 目 录 名 即 可, 这 样 就 大 大 方 便 了 用 户 的 使 用 autotools 生 成 makefile 的 流 程 如 图 3.9 所 示 autoscan aclocal configure.scan autoheader aclocal.m4 configure.in config.h.in makefile.am automake configure makefile.in./configure makefile 图 3.9 autotools 生 成 makefile 的 流 程 图 使 用 autotools 所 生 成 的 makefile autotools 生 成 的 makefile 除 具 有 普 通 的 编 译 功 能 外, 还 具 有 以 下 主 要 功 能 ( 感 兴 趣 的 读 者 可 以 查 看 这 个 简 单 的 hello.c 程 序 的 makefile)
41 1.make 键 入 make 默 认 执 行 make all 命 令, 即 目 标 体 为 all, 其 执 行 情 况 如 下 所 示 : [root@localhost automake]# make if gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"hello\" -DVERSION=\"1.0\" -I. -I. -g -O2 -MT hello.o -MD -MP -MF ".deps/hello.tpo" -c -o hello.o hello.c; \ then mv -f ".deps/hello.tpo" ".deps/hello.po"; else rm -f ".deps/hello.tpo"; exit 1; fi gcc -g -O2 -o hello hello.o 此 时 在 本 目 录 下 就 生 成 了 可 执 行 文 件 hello, 运 行./hello 能 出 现 正 常 结 果, 如 下 所 示 : [root@localhost automake]#./hello Hello!Autoconf! 2.make install 此 时, 会 把 该 程 序 安 装 到 系 统 目 录 中 去, 如 下 所 示 : [root@localhost automake]# make install if gcc -DPACKAGE_NAME=\"\" -DPACKAGE_TARNAME=\"\" -DPACKAGE_VERSION=\"\" -DPACKAGE_STRING=\"\" -DPACKAGE_BUGREPORT=\"\" -DPACKAGE=\"hello\" -DVERSION=\"1.0\" -I. -I. -g -O2 -MT hello.o -MD -MP -MF ".deps/hello.tpo" -c -o hello.o hello.c; \ then mv -f ".deps/hello.tpo" ".deps/hello.po"; else rm -f ".deps/hello.tpo"; exit 1; fi gcc -g -O2 -o hello hello.o make[1]: Entering directory '/root/workplace/automake' test -z "/usr/local/bin" mkdir -p -- "/usr/local/bin" /usr/bin/install -c 'hello' '/usr/local/bin/hello' make[1]: Nothing to be done for 'install-data-am'. make[1]: Leaving directory '/root/workplace/automake' 此 时, 若 直 接 运 行 hello, 也 能 出 现 正 确 结 果, 如 下 所 示 : [root@localhost automake]# hello Hello!Autoconf! 3.make clean 此 时,make 会 清 除 之 前 所 编 译 的 可 执 行 文 件 及 目 标 文 件 (object file, *.o), 如 下
42 所 示 : 嵌 入 式 Linux 应 用 程 序 开 发 标 准 教 程 第 3 章 Linux 下 C 编 程 基 础 [root@localhost automake]# make clean test -z "hello" rm -f hello rm -f *.o 4.make dist 此 时,make 将 程 序 和 相 关 的 文 档 打 包 为 一 个 压 缩 文 档 以 供 发 布, 如 下 所 示 : [root@localhost automake]# make dist [root@localhost automake]# ls hello-1.0-tar.gz hello-1.0-tar.gz 可 见 该 命 令 生 成 了 一 个 hello-1.0-tar.gz 压 缩 文 件 由 上 面 的 讲 述 读 者 不 难 看 出,autotools 是 软 件 维 护 与 发 布 的 必 备 工 具, 鉴 于 此, 如 今 GUN 的 软 件 一 般 都 是 由 automake 来 制 作 的 想 一 想 对 于 automake 制 作 的 这 类 软 件, 应 如 何 安 装 呢? 3.7 实 验 内 容 vi 使 用 练 习 1. 实 验 目 的 通 过 指 定 指 令 的 vi 操 作 练 习, 使 读 者 能 够 熟 练 使 用 vi 中 的 常 见 操 作, 并 且 熟 悉 vi 的 3 种 模 式, 如 果 读 者 能 够 熟 练 掌 握 实 验 内 容 中 所 要 求 的 内 容, 则 表 明 对 vi 的 操 作 已 经 很 熟 练 了 2. 实 验 内 容 (1) 在 /root 目 录 下 建 一 个 名 为 vi 的 目 录 (2) 进 入 vi 目 录 (3) 将 文 件 /etc/inittab 复 制 到 vi 目 录 下 (4) 使 用 vi 打 开 vi 目 录 下 的 inittab (5) 设 定 行 号, 指 出 设 定 initdefault( 类 似 于 id:5:initdefault ) 的 所 在 行 号 (6) 将 光 标 移 到 该 行 (7) 复 制 该 行 内 容 (8) 将 光 标 移 到 最 后 一 行 行 首 (9) 粘 贴 复 制 行 的 内 容 (10) 撤 消 第 9 步 的 动 作
43 (11) 将 光 标 移 动 到 最 后 一 行 的 行 尾 (12) 粘 贴 复 制 行 的 内 容 (13) 光 标 移 到 si::sysinit:/etc/rc.d/rc.sysinit (14) 删 除 该 行 (15) 存 盘 但 不 退 出 (16) 将 光 标 移 到 首 行 (17) 插 入 模 式 下 输 入 Hello,this is vi world! (18) 返 回 命 令 行 模 式 (19) 向 下 查 找 字 符 串 0:wait (20) 再 向 上 查 找 字 符 串 halt (21) 强 制 退 出 vi, 不 存 盘 分 别 指 出 每 个 命 令 处 于 何 种 模 式 下? 3. 实 验 步 骤 (1)mkdir /root/vi (2)cd /root/vi (3)cp /etc/inittab./ (4)vi./inittab (5):set nu( 底 行 模 式 ) (6)17<enter>( 命 令 行 模 式 ) (7)yy (8)G (9)p (10)u (11)$ (12)p (13)21G (14)dd (15):w( 底 行 模 式 ) (16)1G (17)i 并 输 入 Hello,this is vi world! ( 插 入 模 式 ) ( 18)Esc (19)/0:wait( 命 令 行 模 式 ) (20)?halt (21):q!( 底 行 模 式 ) 4. 实 验 结 果 该 实 验 的 最 终 结 果 是 对 /root/inittab 增 加 了 一 行 复 制 的 内 容 : id:5:initdefault
44 3.7.2 用 gdb 调 试 程 序 的 bug 1. 实 验 目 的 通 过 调 试 一 个 有 问 题 的 程 序, 使 读 者 进 一 步 熟 练 使 用 vi 操 作, 而 且 熟 练 掌 握 gcc 编 译 命 令 及 gdb 的 调 试 命 令, 通 过 对 有 问 题 程 序 的 跟 踪 调 试, 进 一 步 提 高 发 现 问 题 和 解 决 问 题 的 能 力 这 是 一 个 很 小 的 程 序, 只 有 35 行, 希 望 读 者 认 真 调 试 2. 实 验 内 容 (1) 使 用 vi 编 辑 器, 将 以 下 代 码 输 入 到 名 为 greet.c 的 文 件 中 此 代 码 的 原 意 为 输 出 倒 序 main 函 数 中 定 义 的 字 符 串, 但 结 果 显 示 没 有 输 出 代 码 如 下 所 示 : #include <stdio.h> int display1(char *string); int display2(char *string); int main () { char string[] = "Embedded Linux"; display1 (string); display2 (string); } int display1 (char *string) { printf ("The original string is %s \n", string); } int display2 (char *string1) { char *string2; int size,i; size = strlen (string1); string2 = (char *) malloc (size + 1); for (i = 0; i < size; i++) { string2[size - i] = string1[i]; } string2[size+1] = ' '; printf("the string afterward is %s\n",string2); } (2) 使 用 gcc 编 译 这 段 代 码, 注 意 要 加 上 -g 选 项 以 方 便 之 后 的 调 试
45 (3) 运 行 生 成 的 可 执 行 文 件, 观 察 运 行 结 果 (4) 使 用 gdb 调 试 程 序, 通 过 设 置 断 点 单 步 跟 踪, 一 步 步 找 出 错 误 所 在 (5) 纠 正 错 误, 更 改 源 程 序 并 得 到 正 确 的 结 果 3. 实 验 步 骤 (1) 在 工 作 目 录 上 新 建 文 件 greet.c, 并 用 vi 启 动 :vi greet.c (2) 在 vi 中 输 入 以 上 代 码 (3) 在 vi 中 保 存 并 退 出, 使 用 命 令 :wq (4) 用 gcc 编 译 :gcc -g greet.c -o greet (5) 运 行 greet, 使 用 命 令./greet, 输 出 为 : The original string is Embedded Linux The string afterward is 可 见, 该 程 序 没 有 能 够 倒 序 输 出 (6) 启 动 gdb 调 试 :gdb greet (7) 查 看 源 代 码, 使 用 命 令 l (8) 在 30 行 (for 循 环 处 ) 设 置 断 点, 使 用 命 令 b 30 (9) 在 33 行 (printf 函 数 处 ) 设 置 断 点, 使 用 命 令 b 33 (10) 查 看 断 点 设 置 情 况, 使 用 命 令 info b (11) 运 行 代 码, 使 用 命 令 r (12) 单 步 运 行 代 码, 使 用 命 令 n (13) 查 看 暂 停 点 变 量 值, 使 用 命 令 p string2[size - i] (14) 继 续 单 步 运 行 代 码 数 次, 并 检 查 string2[size-1] 的 值 是 否 正 确 (15) 继 续 程 序 的 运 行, 使 用 命 令 c (16) 程 序 在 printf 前 停 止 运 行, 此 时 依 次 查 看 string2[0] string2[1], 发 现 string[0] 没 有 被 正 确 赋 值, 而 后 面 的 赋 值 都 是 正 确 的, 这 时, 定 位 程 序 第 31 行, 发 现 程 序 运 行 结 果 错 误 的 原 因 在 于 size-1 由 于 i 只 能 增 到 size-1, 这 样 string2[0] 就 永 远 不 能 被 赋 值 而 保 持 NULL, 故 不 能 输 出 任 何 结 果 (17) 退 出 gdb, 使 用 命 令 q (18) 重 新 编 辑 greet.c, 把 其 中 的 string2[size - i] = string1[i] 改 为 string2[size i - 1] = string1[i]; 即 可 (19) 使 用 gcc 重 新 编 译 :gcc -g greet.c -o greet (20) 查 看 运 行 结 果 :./greet The original string is Embedded Linux The string afterward is xunil deddedbme 这 时, 输 出 结 果 正 确 4. 实 验 结 果 将 原 来 有 错 的 程 序 经 过 gdb 调 试, 找 出 问 题 所 在, 并 修 改 源 代 码, 输 出 正 确 的 倒 序 显 示 字 符 串 的 结 果
46 3.7.3 编 写 包 含 多 文 件 的 makefile 1. 实 验 目 的 通 过 对 包 含 多 文 件 的 makefile 的 编 写, 熟 悉 各 种 形 式 的 makefile, 并 且 进 一 步 加 深 对 makefile 中 用 户 自 定 义 变 量 自 动 变 量 及 预 定 义 变 量 的 理 解 2. 实 验 过 程 (1) 用 vi 在 同 一 目 录 下 编 辑 两 个 简 单 的 hello 程 序, 如 下 所 示 : #hello.c #include "hello.h" int main() { printf("hello everyone!\n"); } #hello.h #include <stdio.h> (2) 仍 在 同 一 目 录 下 用 vi 编 辑 makefile, 且 不 使 用 变 量 替 换, 用 一 个 目 标 体 实 现 ( 即 直 接 将 hello.c 和 hello.h 编 译 成 hello 目 标 体 ) 然 后 用 make 验 证 所 编 写 的 makefile 是 否 正 确 (3) 将 上 述 makefile 使 用 变 量 替 换 实 现 同 样 用 make 验 证 所 编 写 的 makefile 是 否 正 确 (4) 编 辑 另 一 个 makefile, 取 名 为 makefile1, 不 使 用 变 量 替 换, 但 用 两 个 目 标 体 实 现 ( 也 就 是 首 先 将 hello.c 和 hello.h 编 译 为 hello.o, 再 将 hello.o 编 译 为 hello), 再 用 make 的 -f 选 项 验 证 这 个 makefile1 的 正 确 性 (5) 将 上 述 makefile1 使 用 变 量 替 换 实 现 3. 实 验 步 骤 (1) 用 vi 打 开 上 述 两 个 代 码 文 件 hello.c 和 hello.h (2) 在 shell 命 令 行 中 用 gcc 尝 试 编 译, 使 用 命 令 : gcc hello.c o hello, 并 运 行 hello 可 执 行 文 件 查 看 结 果 (3) 删 除 此 次 编 译 的 可 执 行 文 件 :rm hello (4) 用 vi 编 辑 makefile, 如 下 所 示 : hello:hello.c hello.h gcc hello.c -o hello (5) 退 出 保 存, 在 shell 中 键 入 :make, 查 看 结 果
47 (6) 再 次 用 vi 打 开 makefile, 用 变 量 进 行 替 换, 如 下 所 示 : OBJS :=hello.o CC :=gcc hello:$(objs) $(CC) $^ -o $@ (7) 退 出 保 存, 在 shell 中 键 入 make, 查 看 结 果 (8) 用 vi 编 辑 makefile1, 如 下 所 示 : hello:hello.o gcc hello.o -o hello hello.o:hello.c hello.h gcc -c hello.c -o hello.o (9) 退 出 保 存, 在 shell 中 键 入 :make -f makefile1, 查 看 结 果 (10) 再 次 用 vi 编 辑 makefile1, 如 下 所 示 : OBJS1 :=hello.o OBJS2 :=hello.c hello.h CC :=gcc hello:$(objs1) $(CC) $^ -o $@ $(OBJS1):$(OBJS2) $(CC) -c $< -o $@ 在 这 里 请 注 意 区 别 $^ 和 $< (11) 退 出 保 存, 在 shell 中 键 入 make -f makefile1, 查 看 结 果 4. 实 验 结 果 各 种 不 同 形 式 的 makefile 都 能 正 确 地 完 成 其 功 能 使 用 autotools 生 成 包 含 多 文 件 的 makefile 1. 实 验 目 的 通 过 使 用 autotools 生 成 包 含 多 文 件 的 makefile, 进 一 步 掌 握 autotools 的 使 用 方 法 同 时, 掌 握 Linux 下 安 装 软 件 的 常 用 方 法 2. 实 验 过 程 (1) 在 原 目 录 下 新 建 文 件 夹 auto (2) 将 上 例 的 两 个 代 码 文 件 hello.c 和 hello.h 复 制 到 该 目 录 下 (3) 使 用 autoscan 生 成 configure.scan (4) 编 辑 configure.scan, 修 改 相 关 内 容, 并 将 其 重 命 名 为 configure.in
48 (5) 使 用 aclocal 生 成 aclocal.m4 (6) 使 用 autoconf 生 成 configure (7) 使 用 autoheader 生 成 config.h.in (8) 编 辑 makefile.am (9) 使 用 automake 生 成 makefile.in (10) 使 用 configure 生 成 makefile (11) 使 用 make 生 成 hello 可 执 行 文 件, 并 在 当 前 目 录 下 运 行 hello 查 看 结 果 (12) 使 用 make install 将 hello 安 装 到 系 统 目 录 下, 并 运 行, 查 看 结 果 (13) 使 用 make dist 生 成 hello 压 缩 包 (14) 解 压 hello 压 缩 包 (15) 进 入 解 压 目 录 (16) 在 该 目 录 下 安 装 hello 软 件 3. 实 验 步 骤 (1)mkdir./auto (2)cp hello.*./auto( 假 定 原 先 在 hello.c 文 件 目 录 下 ) (3) 命 令 :autoscan (4) 使 用 vi 编 辑 configure.scan 为 : # -*- Autoconf -*- # Process this file with autoconf to produce a configure script. AC_PREREQ(2.59) AC_INIT(hello, 1.0) AM_INIT_AUTOMAKE(hello,1.0) AC_CONFIG_SRCDIR([hello.h]) AC_CONFIG_HEADER([config.h]) # Checks for programs. AC_PROG_CC # Checks for libraries. # Checks for header files. # Checks for typedefs, structures, and compiler characteristics. # Checks for library functions. AC_OUTPUT(makefile) (5) 保 存 退 出, 并 重 命 名 为 configure.in (6) 运 行 :aclocal (7) 运 行 :autoconf, 并 用 ls 查 看 是 否 生 成 了 configure 可 执 行 文 件 (8) 运 行 :autoheader (9) 用 vi 编 辑 makefile.am 文 件 为 :
49 AUTOMAKE_OPTIONS=foreign bin_programs=hello hello_sources=hello.c hello.h (10) 运 行 :automake, 然 后 运 行 automake a (11) 运 行 :./configure (12) 运 行 :make (13) 运 行 :./hello, 查 看 结 果 是 否 正 确 (14) 运 行 :make install (15) 运 行 :hello, 查 看 结 果 是 否 正 确 (16) 运 行 :make dist (17) 在 当 前 目 录 下 解 压 hello-1.0.tar.gz:tar zxvf hello-1.0.tar.gz (18) 进 入 解 压 目 录 :cd./hello-1.0 (19) 下 面 开 始 Linux 下 常 见 的 安 装 软 件 步 骤 :./configure (20) 运 行 :make (21) 运 行 :./hello( 在 正 常 安 装 时 这 一 步 可 省 略 ) (22) 运 行 :make install (23) 运 行 :hello, 查 看 结 果 是 否 正 确 4. 实 验 结 果 能 够 正 确 使 用 autotools 生 成 makefile, 并 且 能 够 成 功 安 装 短 小 的 hello 软 件 3.8 本 章 小 结 本 章 是 Linux 中 进 行 C 语 言 编 程 的 基 础, 首 先 讲 解 了 C 语 言 编 程 的 关 键 点, 这 里 关 键 要 了 解 编 辑 器 编 译 链 接 器 调 试 器 及 项 目 管 理 工 具 等 概 念 接 下 来, 本 章 介 绍 了 两 个 Linux 中 常 见 的 编 辑 器 vi 和 emacs, 并 且 主 要 按 照 它 们 的 使 用 流 程 进 行 讲 解 再 接 下 来, 本 章 介 绍 了 gcc 编 译 器 的 使 用 函 数 库 的 创 建 与 使 用 以 及 gdb 调 试 器 的 使 用, 并 结 合 具 体 的 实 例 进 行 讲 解 虽 然 它 们 的 选 项 比 较 多, 但 是 常 用 的 并 不 多, 读 者 着 重 掌 握 笔 者 例 子 中 使 用 的 一 些 选 项 即 可 之 后, 本 章 又 介 绍 了 make 工 程 管 理 器 的 使 用, 这 里 包 括 makefile 的 基 本 结 构 makefile 的 变 量 定 义 及 其 规 则 和 make 的 使 用 最 后 介 绍 的 是 autotools 的 使 用, 这 是 非 常 有 用 的 工 具, 希 望 读 者 能 够 掌 握 本 章 的 实 验 安 排 比 较 多, 包 括 了 vi gdb makefile 和 autotool 的 使 用, 由 于 这 些 都 是 Linux 中 的 常 用 软 件, 因 此 希 望 读 者 切 实 掌 握
50 3.9 思 考 与 练 习 嵌 入 式 Linux 应 用 程 序 开 发 标 准 教 程 第 3 章 Linux 下 C 编 程 基 础 在 Linux 下 综 合 使 用 vi gcc 编 译 器 和 gdb 调 试 器 开 发 汉 诺 塔 游 戏 程 序 汉 诺 塔 游 戏 介 绍 如 下 约 19 世 纪 末, 在 欧 洲 的 商 店 中 出 售 一 种 智 力 玩 具, 在 一 块 铜 板 上 有 三 根 杆, 如 图 3.10 所 示 其 中, 最 左 边 的 杆 上 自 上 而 下 由 小 到 大 顺 序 串 着 由 64 个 圆 盘 构 成 的 塔 目 的 是 将 最 左 边 杆 上 的 盘 全 部 移 到 右 边 的 杆 上, 条 件 是 一 次 只 能 移 动 一 个 盘, 且 不 允 许 大 盘 放 在 小 盘 的 上 面 C B A 汉 诺 塔 图 3.10 汉 诺 塔 游 戏 示 意 图 推 荐 课 程 : 嵌 入 式 学 院 - 嵌 入 式 Linux 长 期 就 业 班 招 生 简 章 : 课 程 内 容 : 项 目 实 战 : 出 版 教 材 : 实 验 设 备 : 推 荐 课 程 : 华 清 远 见 - 嵌 入 式 Linux 短 期 高 端 培 训 班 嵌 入 式 Linux 应 用 开 发 班 :
51 嵌 入 式 Linux 系 统 开 发 班 : 嵌 入 式 Linux 驱 动 开 发 班 :
《C语言基础入门》课程教学大纲
C 语 言 开 发 入 门 教 程 课 程 教 学 大 纲 课 程 编 号 :201409210011 学 分 :5 学 分 学 时 :58 学 时 ( 其 中 : 讲 课 学 时 :39 学 时 上 机 学 时 :19 学 时 ) 先 修 课 程 : 计 算 机 导 论 后 续 课 程 :C++ 程 序 设 计 适 用 专 业 : 信 息 及 其 计 算 机 相 关 专 业 开 课 部 门 : 计
<433A5C446F63756D656E747320616E642053657474696E67735C41646D696E6973747261746F725CD7C0C3E65CC2DBCEC4CFB5CDB3CAB9D3C3D6B8C4CFA3A8BCF2BBAFA3A95CCAB9D3C3D6B8C4CF31302D31392E646F63>
( 一 ) 系 统 整 体 操 作 流 程 简 述 3 ( 二 ) 系 统 中 各 角 色 操 作 功 能 说 明 5 1. 学 院 管 理 员 5 2. 教 学 院 长 8 3. 指 导 教 师 10 4. 答 辩 组 组 长 12 5. 学 生 12 6. 系 统 管 理 员 15 ( 一 ) 论 文 系 统 常 见 问 题 16 ( 二 ) 论 文 查 重 常 见 问 题 22 1 2 主
I
机 电 一 级 注 册 建 造 师 继 续 教 育 培 训 广 东 培 训 点 网 上 报 名 操 作 使 用 手 册 (2013 年 1 月, 第 一 版 ) 第 一 章 个 人 注 册 与 个 人 信 息 管 理 1. 个 人 注 册 ( 请 每 人 只 申 请 一 个 注 册 号, 如 果 单 位 批 量 报 班 单 位 帮 申 请 注 册, 不 需 个 人 再 注 册 ) 首 次 报 班,
修改版-操作手册.doc
职 称 信 息 系 统 升 级 指 南 须 使 用 IE9 及 其 以 上 版 本 浏 览 器 或 谷 歌 浏 览 器 登 录 www.njrs.gov.cn 南 京 市 职 称 ( 职 业 资 格 ) 工 作 领 导 小 组 办 公 室 2016 年 5 月 目 录 一 申 报 人 员 操 作 指 南...1 1.1 职 称 初 定 申 报...1 1.1.1 职 称 初 定 基 础 信 息 填
说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度, 对 2015 年 春 季 期 教 运 行 基
内 部 资 料 东 北 师 范 大 教 运 行 基 本 状 态 据 报 告 2015 年 春 季 期 教 务 处 2015 年 10 月 27 日 说 明 为 了 反 映 教 运 行 的 基 本 状 态, 为 校 和 院 制 定 相 关 政 策 和 进 行 教 建 设 与 改 革 提 供 据 依 据, 校 从 程 资 源 ( 开 类 别 开 量 规 模 ) 教 师 结 构 程 考 核 等 维 度,
Microsoft Word - 第7章 图表反转形态.doc
第 七 章 图 表 反 转 形 态 我 们 知 道 市 场 趋 势 共 有 三 种 : 上 升 趋 势 下 降 趋 势 和 横 向 整 理 市 场 的 价 格 波 动 都 是 运 行 在 这 三 种 趋 势 中, 所 有 的 走 势 都 是 这 三 种 趋 势 的 排 列 组 合 如 图 市 场 趋 势 结 构 示 意 图 7-1 所 示 市 场 趋 势 结 构 示 意 图 7-1 图 市 场 趋
第2章 数据类型、常量与变量
第 2 章 数 据 类 型 常 量 与 变 量 在 计 算 机 程 序 中 都 是 通 过 值 (value) 来 进 行 运 算 的, 能 够 表 示 并 操 作 值 的 类 型 为 数 据 类 型 在 本 章 里 将 会 介 绍 JavaScript 中 的 常 量 (literal) 变 量 (variable) 和 数 据 类 型 (data type) 2.1 基 本 数 据 类 型 JavaScript
何 秋 琳 张 立 春 视 觉 学 习 研 究 进 展 视 觉 注 意 视 觉 感 知
第 卷 第 期 年 月 开 放 教 育 研 究 何 秋 琳 张 立 春 华 南 师 范 大 学 未 来 教 育 研 究 中 心 广 东 广 州 随 着 图 像 化 技 术 和 电 子 媒 体 的 发 展 视 觉 学 习 也 逐 步 发 展 为 学 习 科 学 的 一 个 研 究 分 支 得 到 研 究 人 员 和 教 育 工 作 者 的 广 泛 关 注 基 于 此 作 者 试 图 对 视 觉 学 习
0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 考 核 ( 扣 原 因 ) 考 评 得 3 安 全 生 产 目 30 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 无 轻 伤 责 任 事 故 无 重 大 质 量
0 年 上 半 年 评 价 与 考 核 细 则 序 号 部 门 要 素 值 考 核 内 容 考 核 方 式 考 核 标 准 无 同 等 责 任 以 上 道 路 交 通 亡 人 事 故 3 无 轻 伤 责 任 事 故 目 标 30 及 事 无 重 大 质 量 工 作 过 失 故 管 无 其 他 一 般 责 任 事 故 理 在 公 司 文 明 环 境 创 建 中, 无 工 作 过 失 及 被 追 究 的
HSK( 一 级 ) 考 查 考 生 的 日 常 汉 语 应 用 能 力, 它 对 应 于 国 际 汉 语 能 力 标 准 一 级 欧 洲 语 言 共 同 参 考 框 架 (CEF) A1 级 通 过 HSK( 一 级 ) 的 考 生 可 以 理 解 并 使 用 一 些 非 常 简 单 的 汉 语
新 汉 语 水 平 考 试 HSK 为 使 汉 语 水 平 考 试 (HSK) 更 好 地 服 务 于 汉 语 学 习 者, 中 国 国 家 汉 办 组 织 中 外 汉 语 教 学 语 言 学 心 理 学 和 教 育 测 量 学 等 领 域 的 专 家, 在 充 分 调 查 了 解 海 外 实 际 汉 语 教 学 情 况 的 基 础 上, 吸 收 原 有 HSK 的 优 点, 借 鉴 近 年 来 国
张 荣 芳 中 山 大 学 历 史 系 广 东 广 州 张 荣 芳 男 广 东 廉 江 人 中 山 大 学 历 史 系 教 授 博 士 生 导 师 我 们 要 打 破 以 前 学 术 界 上 的 一 切 偶 像 以 前 学 术 界 的 一 切 成 见 屏 除 我 们 要 实 地 搜 罗 材 料 到 民 众 中 寻 方 言 到 古 文 化 的 遗 址 去 发 掘 到 各 种 的 人 间 社 会 去
目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理 巡 检 计 划 查 询 详 情 销 售 管
宝 汇 德 Turbocare 微 服 务 系 统 客 户 操 作 手 册 Version 2.0 北 京 宝 汇 德 技 术 服 务 器 有 限 公 司 技 术 研 发 部 目 录 关 于 图 标... 3 登 陆 主 界 面... 3 工 单 管 理... 5 工 单 列 表... 5 搜 索 工 单... 5 工 单 详 情... 6 创 建 工 单... 9 设 备 管 理... 10 巡
文 化 记 忆 传 统 创 新 与 节 日 遗 产 保 护 根 据 德 国 学 者 阿 斯 曼 的 文 化 记 忆 理 论 仪 式 与 文 本 是 承 载 文 化 记 忆 的 两 大 媒 体 在 各 种 仪 式 行 为 中 节 日 以 其 高 度 的 公 共 性 有 组 织 性 和 历 史 性 而 特 别 适 用 于 文 化 记 忆 的 储 存 和 交 流 节 日 的 文 化 功 能 不 仅 在 于
,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,, ( ),,,, (, : ),, :,
: 周 晓 虹 : - -., - - - -. :( ), -,.( ),,, -. - ( ).( ) ', -,,,,, ( ).( ),,, -., '.,, :,,,, :,,,, ,,,,, :,, (.,, );, (, : ), (.., ;. &., ;.. &.., ;, ;, ),,,,,,, ( ) ( ),,,,.,,,,,, : ;, ;,.,,,,, (., : - ),,,,
登录、注册功能的测试用例设计.doc
注 册 登 陆 测 试 用 例 和 修 改 密 码 测 试 用 例 完 整 版 摘 自 网 络, 狗 狗 整 理 [email protected] 修 改 历 史 日 期 版 本 作 者 修 改 内 容 评 审 号 变 更 控 制 号 2010-11-25 1.0 初 稿 2011-09-17 2.0 整 理 一 注 册 测 试 用 例 序 号 : 1 控 件 名 称 : 功 能 描 述 : 注 册 编
一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创 新 能 力, 综 合 运 用 所 学 知 识 发 现 问 题, 分 析 问 题 和 解 决
上 海 市 公 共 卫 生 硕 士 专 业 学 位 论 文 基 本 要 求 和 评 价 指 标 体 系 ( 试 行 ) 上 海 市 学 位 委 员 会 办 公 室 二 O 一 二 年 三 月 一 公 共 卫 生 硕 士 专 业 学 位 论 文 的 概 述 学 位 论 文 是 对 研 究 生 进 行 科 学 研 究 或 承 担 专 门 技 术 工 作 的 全 面 训 练, 是 培 养 研 究 生 创
评 委 : 李 炎 斌 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单
评 委 : 李 炎 斌 - 个 人 清 标 评 审 明 细 表 评 审 因 素 序 号 投 标 单 位 清 标 评 审 1 深 圳 市 创 捷 科 技 有 限 合 格 2 四 川 川 大 智 胜 软 件 股 份 有 限 合 格 3 北 京 航 天 长 峰 科 技 工 业 集 团 有 限 公 司 合 格 4 深 圳 中 兴 力 维 技 术 有 限 合 格 5 深 圳 键 桥 通 讯 技 术 股 份 有
龚 亚 夫 在 重 新 思 考 基 础 教 育 英 语 教 学 的 理 念 一 文 中 援 引 的 观 点 认 为 当 跳 出 本 族 语 主 义 的 思 维 定 式 后 需 要 重 新 思 考 许 多 相 连 带 的 问 题 比 如 许 多 发 音 的 细 微 区 别 并 不 影 响 理 解 和
语 音 语 篇 语 感 语 域 林 大 津 毛 浩 然 改 革 开 放 以 来 的 英 语 热 引 发 了 大 中 小 学 英 语 教 育 整 体 规 划 问 题 在 充 分 考 虑 地 区 学 校 和 个 体 差 异 以 及 各 家 观 点 的 基 础 上 遵 循 实 事 求 是 逐 级 定 位 逐 层 分 流 因 材 施 教 的 原 则 本 研 究 所 倡 导 的 语 音 语 篇 语 感 语 域
18 上 报 该 学 期 新 生 数 据 至 阳 光 平 台 第 一 学 期 第 四 周 至 第 六 周 19 督 促 学 习 中 心 提 交 新 增 专 业 申 请 第 一 学 期 第 四 周 至 第 八 周 20 编 制 全 国 网 络 统 考 十 二 月 批 次 考 前 模 拟 题 第 一 学
1 安 排 组 织 全 国 网 络 统 考 九 月 批 次 网 上 考 前 辅 导 第 一 学 期 第 一 周 统 考 考 前 半 个 月 2 下 发 全 国 网 络 统 考 九 月 批 次 准 考 证 第 一 学 期 第 一 周 导 出 下 半 年 成 人 本 科 学 士 学 位 英 语 统 一 考 试 报 考 3 信 息 第 一 学 期 第 一 周 4 教 学 计 划 和 考 试 计 划 上 网,
Microsoft Word - 第3章.doc
52 5 天 通 过 职 称 计 算 机 考 试 ( 考 点 视 频 串 讲 + 全 真 模 拟 ) Word 2003 中 文 字 处 理 ( 第 2 版 ) 第 3 章 3 字 符 格 式 需 要 掌 握 的 考 点 字 体 字 形 和 字 号 的 设 置 ; 上 标 下 标 空 心 字 等 字 体 效 果 的 使 用 ; 字 符 间 距 的 调 整 ; 改 变 字 符 颜 色 底 纹 添 加
科 学 出 版 社 科 学 出 版 社 前 言 本 书 是 针 对 普 通 高 等 院 校 经 济 类 和 工 商 管 理 类 本 科 专 业 财 务 管 理 学 的 教 学 需 求, 结 合 教 育 部 经 济 管 理 类 本 科 财 务 管 理 学 课 程 教 学 大 纲 编 写 而 成 的 本 书 执 笔 者 都 是 长 期 工 作 在 财 务 管 理 教 学 一 线 的 专 业 教 师,
4 进 入 交 互 区 设 置 的 组 件 管 理, 在 组 件 管 理 中, 教 师 可 以 选 择 课 程 空 间 中 的 所 有 组 件, 并 通 过 点 击 启 用 或 不 启 用 选 定 组 件 在 课 程 空 间 中 的 显 示 5 进 入 工 作 室 管 理 的 工 作 室 首 页,
网 络 教 育 新 平 台 教 师 使 用 简 易 手 册 一 登 录 教 师 工 作 室 1 打 开 西 南 科 技 大 学 网 络 教 育 教 学 教 务 新 平 台 主 页 面 :http://www.swust.net.cn/ 2 在 主 页 面 左 边 的 登 陆 区 中, 用 户 名 和 密 码 处 分 别 输 入 自 己 的 用 户 名 ( 教 师 ID 号 ) 和 密 码 ( 初 始
<4D F736F F D D323630D6D0B9FAD3A6B6D4C6F8BAF2B1E4BBAFB5C4D5FEB2DFD3EBD0D0B6AF C4EAB6C8B1A8B8E6>
中 国 应 对 气 候 变 化 的 政 策 与 行 动 2013 年 度 报 告 国 家 发 展 和 改 革 委 员 会 二 〇 一 三 年 十 一 月 100% 再 生 纸 资 源 目 录 前 言... 1 一 应 对 气 候 变 化 面 临 的 形 势... 3 二 完 善 顶 层 设 计 和 体 制 机 制... 4 三 减 缓 气 候 变 化... 8 四 适 应 气 候 变 化... 20
Microsoft Word - 文件汇编.doc
北 京 市 中 医 管 理 局 二 一 五 年 四 月 ... 1... 18 2015... 30 京 中 医 政 字 [2014]160 号 1 2 一 充 分 认 识 中 医 健 康 乡 村 建 设 工 作 的 重 要 意 义 二 建 立 健 全 工 作 保 障 机 制 2014 12 15 三 做 好 工 作 启 动 的 准 备 事 宜 1 2014 12 15 5-10 2014 12 15
全国建筑市场注册执业人员不良行为记录认定标准(试行).doc
- 1 - - 2 - 附 件 全 国 建 筑 市 场 注 册 执 业 人 员 不 良 记 录 认 定 标 准 ( 试 行 ) 说 明 为 了 完 善 建 筑 市 场 注 册 执 业 人 员 诚 信 体 系 建 设, 规 范 执 业 和 市 场 秩 序, 依 据 相 关 法 律 法 规 和 部 门 规 章, 根 据 各 行 业 特 点, 我 部 制 订 了 全 国 建 筑 市 场 注 册 执 业 人
2006年顺德区高中阶段学校招生录取分数线
2014 年 顺 德 区 高 中 阶 段 学 校 考 试 提 前 批 第 一 批 第 二 批 学 校 录 取 根 据 佛 山 市 办 提 供 的 考 生 数 据, 现 将 我 区 2014 年 高 中 阶 段 学 校 考 试 提 前 批 第 一 批 第 二 批 学 校 的 录 取 公 布 如 下 : 一 顺 德 一 中 录 取 分 第 1 志 愿, 总 分 585, 综 合 表 现 评 价 A, 考
自 服 务 按 钮 无 法 访 问 新 系 统 的 自 服 务 页 面 因 此 建 议 用 户 从 信 网 中 心 (http://nc.tju.edu.cn) 主 页, 右 下 角 位 置 的 常 用 下 载, 或 校 园 网 用 户 自 服 务 (http://g.tju.edu.cn) 首 页
校 园 网 认 证 计 费 系 统 变 更 说 明 及 使 用 帮 助 为 提 高 校 园 网 的 可 靠 性 和 可 用 性, 提 升 用 户 的 上 网 体 验, 同 时 也 为 解 决 近 期 校 园 网 无 法 认 证 或 登 录 页 面 弹 出 缓 慢 的 问 题, 信 网 中 心 于 近 期 对 校 园 网 认 证 计 费 系 统 进 行 升 级 切 换 现 将 升 级 后 新 系 统
深圳市新亚电子制程股份有限公司
证 券 代 码 :002388 证 券 简 称 : 新 亚 制 程 公 告 编 号 :2016-053 深 圳 市 新 亚 电 子 制 程 股 份 有 限 公 司 2016 年 第 二 次 临 时 股 东 大 会 决 议 公 告 本 公 司 及 董 事 会 全 体 成 员 保 证 公 告 内 容 真 实 准 确 和 完 整, 不 存 在 虚 假 记 载 误 导 性 陈 述 或 者 重 大 遗 漏 特
评 委 : 徐 岩 宇 - 个 人 技 术 标 资 信 标 初 步 审 查 明 细 表 序 号 投 标 单 位 投 标 函 未 按 招 标 文 件 规 定 填 写 漏 填 或 内 容 填 写 错 误 的 ; 不 同 投 标 人 的 投 标 文 件 由 同 一 台 电 脑 或 同 一 家 投 标 单
评 委 : 徐 岩 宇 - 个 人 清 标 评 审 明 细 表 评 审 因 素 序 号 投 标 单 位 清 标 评 审 1 深 圳 市 创 捷 科 技 有 限 合 格 2 四 川 川 大 智 胜 软 件 股 份 有 限 合 格 3 北 京 航 天 长 峰 科 技 工 业 集 团 有 限 公 司 合 格 4 深 圳 中 兴 力 维 技 术 有 限 合 格 5 深 圳 键 桥 通 讯 技 术 股 份 有
金 不 少 于 800 万 元, 净 资 产 不 少 于 960 万 元 ; (3) 近 五 年 独 立 承 担 过 单 项 合 同 额 不 少 于 1000 万 元 的 智 能 化 工 程 ( 设 计 或 施 工 或 设 计 施 工 一 体 ) 不 少 于 2 项 ; (4) 近 三 年 每 年
工 程 设 计 与 施 工 资 质 标 准 一 总 则 建 筑 智 能 化 工 程 设 计 与 施 工 资 质 标 准 ( 一 ) 为 了 加 强 对 从 事 建 筑 智 能 化 工 程 设 计 与 施 工 企 业 的 管 理, 维 护 建 筑 市 场 秩 序, 保 证 工 程 质 量 和 安 全, 促 进 行 业 健 康 发 展, 结 合 建 筑 智 能 化 工 程 的 特 点, 制 定 本 标
编号:
编 号 : 企 业 内 高 技 能 人 才 培 养 评 价 实 施 方 案 ( 仅 适 用 于 企 业 特 有 行 业 特 有 工 种 ) 实 施 单 位 ( 公 章 ) 申 报 日 期 年 _ 月 日 1 企 业 内 高 技 能 人 才 培 养 评 价 项 目 实 施 方 案 申 报 表 项 目 名 称 等 级 项 目 性 质 课 时 申 报 单 位 联 系 人 通 讯 地 址 电 话 手 机 电
导 数 和 微 分 的 概 念 导 数 的 几 何 意 义 和 物 理 意 义 函 数 的 可 导 性 与 连 续 性 之 间 的 关 系 平 面 曲 线 的 切 线 和 法 线 导 数 和 微 分 的 四 则 运 算 基 本 初 等 函 数 的 导 数 复 合 函 数 反 函 数 隐 函 数 以
2015 年 考 研 数 学 二 考 试 大 纲 考 试 科 目 : 高 等 数 学 线 性 代 数 考 试 形 式 和 试 卷 结 构 一 试 卷 满 分 及 考 试 时 间 试 卷 满 分 为 150 分, 考 试 时 间 为 180 分 钟. 二 答 题 方 式 答 题 方 式 为 闭 卷 笔 试. 三 试 卷 内 容 结 构 高 等 教 学 约 78% 线 性 代 数 约 22% 四 试 卷
云信Linux SSH认证代理用户手册
Windows 主 机 登 录 保 护 (RDP) 管 理 员 配 置 手 册 V1.0 云 信 事 业 部 飞 天 诚 信 科 技 股 份 有 限 公 司 www.cloudentify.com 章 节 目 录 第 1 章 管 理 平 台 配 置 说 明... 1 1.1 注 册... 1 1.2 登 录... 3 1.3 添 加 应 用... 4 1.4 添 加 用 户... 7 1.5 激 活
目 录 一 系 统 访 问... 1 二 门 户 首 页 申 报 用 户 审 核 用 户... 2 三 系 统 登 录 用 户 名 密 码 登 录 新 用 户 注 册 用 户 登 录 已 注 册 用
水 路 运 输 建 设 综 合 管 理 信 息 系 统 - 门 户 系 统 用 户 手 册 二 零 一 五 年 十 一 月 目 录 一 系 统 访 问... 1 二 门 户 首 页... 1 1. 申 报 用 户... 1 2. 审 核 用 户... 2 三 系 统 登 录... 4 1. 用 户 名 密 码 登 录... 4 1.1 新 用 户 注 册... 4 1.2 用 户 登 录... 7
( 二 ) 现 行 统 一 高 考 制 度 不 利 于 培 养 人 的 创 新 精 神,,,,,,,,,,,,, [ ],,,,,,,,,,, :, ;,,,,,,? ( 三 ) 现 行 统 一 高 考 制 度 不 利 于 全 体 学 生 都 获 得 全 面 发 展,, [ ],,,,,,,,,,,
( ) ( )... 李 雪 岩, 龙 耀 (. 广 西 民 族 大 学 商 学 院, 广 西 南 宁 ;. 中 山 大 学 教 育 学 院, 广 东 广 州 ) : 高 等 教 育 是 专 业 教 育 高 考 是 为 高 等 教 育 服 务 的, 是 为 高 等 专 业 教 育 选 拔 有 专 业 培 养 潜 质 的 人 才 现 行 高 考 制 度 忽 略 专 业 潜 质 的 因 素, 过 份 强
定 位 和 描 述 : 程 序 设 计 / 办 公 软 件 高 级 应 用 级 考 核 内 容 包 括 计 算 机 语 言 与 基 础 程 序 设 计 能 力, 要 求 参 试 者 掌 握 一 门 计 算 机 语 言, 可 选 类 别 有 高 级 语 言 程 序 设 计 类 数 据 库 编 程 类
全 国 计 算 机 等 级 考 试 调 整 方 案 2011 年 7 月, 教 育 部 考 试 中 心 组 织 召 开 了 第 五 届 全 国 计 算 机 等 级 考 试 (NCRE) 考 委 会 会 议, 会 议 完 成 NCRE 考 委 会 换 届 选 举, 并 确 定 了 下 一 步 改 革 和 发 展 的 目 标 在 新 的 历 史 时 期,NCRE 将 以 保 持 稳 定 为 前 提 以
世华财讯模拟操作手册
第 一 部 分 : 股 票 模 拟 操 作 部 分 1. 登 录 与 主 界 面 1.1 登 录 学 生 在 桌 面 上, 打 开 世 华 文 件 夹, 直 接 双 击 文 件 夹 中 的 快 捷 图 标, 系 统 弹 出 世 华 财 讯 模 拟 股 票 交 易 系 统 ( 客 户 端 ) 窗 口, 如 图 1.1 所 示 图 1.1 请 输 入 登 录 名 称 及 密 码, 单 击 确 认 登 录
Template BR_Rec_2005.dot
ITU-R BT.1789 建 议 书 1 ITU-R BT.1789 建 议 书 在 分 组 视 频 传 输 中 利 用 传 输 误 码 信 息 重 建 接 收 视 频 的 方 法 (ITU-R 44/6 和 ITU-R 109/6 课 题 ) (2007 年 ) 范 围 本 建 议 书 对 业 务 提 供 商 重 建 接 收 视 频 的 方 法 做 了 详 细 介 绍, 以 便 利 用 传 输
第二讲 数列
Togisu XueD Persolized Eduio Developme Ceer 高 考 中 不 等 式 问 题 的 解 决 方 法 通 润 达 久 王 力 前 言 : 近 年 来 不 等 式 问 题 正 越 来 越 多 的 出 现 在 调 研 题 和 高 考 试 题 中 而 且 大 多 出 现 在 江 苏 高 考 的 填 空 压 轴 题 中 是 高 考 考 察 的 重 点 和 难 点 由 于
类 似 地, 又 可 定 义 变 下 限 的 定 积 分 : ( ). 与 ψ 统 称 为 变 限 积 分. f ( ) d f ( t) dt,, 注 在 变 限 积 分 (1) 与 () 中, 不 可 再 把 积 分 变 量 写 成 的 形 式 ( 例 如 ) 以 免 与 积 分 上 下 限 的
5 ( 一 ) 微 积 分 学 基 本 定 理 当 函 数 的 可 积 性 问 题 告 一 段 落, 并 对 定 积 分 的 性 质 有 了 足 够 的 认 识 之 后, 接 着 要 来 解 决 一 个 以 前 多 次 提 到 过 的 问 题 在 定 积 分 形 式 下 证 明 连 续 函 数 必 定 存 在 原 函 数. 一 变 限 积 分 与 原 函 数 的 存 在 性 设 f 在 [,] 上
1600 1000 40 50 2030 2000 采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路 2
简 略 版 本 :2015 3 10 2016 2021 全 球 卫 生 部 门 病 毒 性 肝 炎 战 略 2016 2021 2015 3 12 2012 2010 2014 2015 2016 2021 140 55% 35% 5 15% 5 20% 2.4 1.3 1.5 1 1600 1000 40 50 2030 2000 采 取 行 动 的 机 会 90% 开 拓 成 功 的 道 路
马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则!! # #
马 克 思 主 义 公 正 观 的 基 本 向 度 及 方 法 论 原 则 马 俊 峰 在 社 会 公 正 问 题 的 大 讨 论 中 罗 尔 斯 诺 齐 克 哈 耶 克 麦 金 泰 尔 等 当 代 西 方 思 想 家 的 论 述 被 反 复 引 用 和 申 说 而 将 马 克 思 恩 格 斯 等 经 典 作 家 的 观 点 置 于 一 种 被 忽 视 甚 至 被 忘 却 的 状 态 形 成 这 种
黄 金 原 油 总 持 仓 增 长, 同 比 增 幅 分 别 为 4.2% 和 4.1% 而 铜 白 银 以 及 玉 米 则 出 现 减 持, 减 持 同 比 减 少 分 别 为 9.4%,9.4% 以 及 6.5% 大 豆, 豆 粕 结 束 连 续 4 周 总 持 仓 量 增 长, 出 现 小 幅
小 麦 净 多 持 仓 增 加, 豆 油 豆 粕 净 多 持 仓 减 少 美 国 CFTC 持 仓 报 告 部 门 : 市 场 研 究 与 开 发 部 类 型 : 量 化 策 略 周 报 日 期 :212 年 5 月 7 日 电 话 :592-5678753 网 址 :www.jinyouqh.com 主 要 内 容 : 根 据 美 国 CFTC 公 布 的 数 据, 本 报 告 中 的 11 个
(2015-2016-2)-0004186-04205-1 140242 信 号 与 系 统 Ⅰ 学 科 基 础 必 修 课 37 37 1 教 203 17 周 2016 年 06 月 13 日 (08:00-09:35) (2015-2016-2)-0004186-04205-1 141011
关 于 2015-2016 学 年 第 二 学 期 期 末 周 内 考 试 时 间 地 点 安 排 选 课 课 号 班 级 名 称 课 程 名 称 课 程 性 质 合 考 人 数 实 际 人 数 考 试 教 室 考 试 段 考 试 时 间 (2015-2016-2)-0006178-04247-1 130101 测 试 技 术 基 础 学 科 基 础 必 修 课 35 35 1 教 401 17 周
附 件 : 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 二 一 四 年 九 月 十 一 日 2
公 开 上 海 市 城 乡 建 设 和 管 理 委 员 会 文 件 沪 建 管 2014 758 号 上 海 市 城 乡 建 设 和 管 理 委 员 会 关 于 印 发 上 海 市 建 筑 施 工 企 业 施 工 现 场 项 目 管 理 机 构 关 键 岗 位 人 员 配 备 指 南 的 通 知 各 区 县 建 设 和 交 通 委 员 会 : 为 进 一 步 加 强 对 建 设 工 程 施 工 现
三门峡市质量技术监督局清单公示
附 件 4 卢 氏 县 财 政 局 行 政 职 权 运 行 流 程 图 一 行 政 处 罚 类 1. 第 1 项 一 般 程 序 流 程 图 案 件 来 源 初 步 确 认 违 法 事 实, 责 令 停 止 违 法 行 为 县 财 政 局 立 案 审 批 综 合 股 登 记 立 案 调 查 取 证 不 予 立 案 综 合 股 撰 写 调 查 终 结 报 告 移 送 有 关 部 门 综 合 股 提 出
<433A5C55736572735C6B73625C4465736B746F705CB9FABCCAD6D0D2BDD2A9D7A8D2B5B8DFBCB6BCBCCAF5D6B0B3C6C6C0C9F3C9EAC7EBD6B8C4CFA3A832303136CDA8D3C3B0E6A3A92E646F63>
附 件 1 国 际 中 药 专 业 高 级 技 术 职 称 评 审 条 件 及 报 名 材 料 一 系 列 ( 一 ) 中 1 高 级 专 科 ( 副 ) 高 级 专 科 ( 副 ) 1 取 得 中 专 科 职 称 后, 独 立 从 事 中 临 床 实 践 5 年 以 上 2 取 得 中 博 士 学 位 后, 临 床 实 践 2 年 以 上 3 取 得 中 硕 士 学 位 后, 临 床 实 践 7
第 一 部 分 MagiCAD for Revit 安 装 流 程
MagiCAD 软 件 安 装 流 程 MagiCAD v2015.4 for Revit 广 联 达 软 件 股 份 有 限 公 司 BIM 中 心 编 写 2015 年 06 月 第 一 部 分 MagiCAD for Revit 安 装 流 程 一 安 装 前 需 要 确 认 的 内 容 安 装 MagiCAD 程 序 之 前, 请 您 先 确 定 以 下 事 宜 1. 当 前 用 户 账 户
<4D6963726F736F667420576F7264202D20B9D8D3DAB0BABBAAA3A8C9CFBAA3A3A9D7D4B6AFBBAFB9A4B3CCB9C9B7DDD3D0CFDEB9ABCBBE32303132C4EAC4EAB6C8B9C9B6ABB4F3BBE1B7A8C2C9D2E2BCFBCAE92E646F6378>
上 海 德 载 中 怡 律 师 事 务 所 关 于 昂 华 ( 上 海 ) 自 动 化 工 程 股 份 有 限 公 司 二 〇 一 二 年 年 度 股 东 大 会 法 律 意 见 书 上 海 德 载 中 怡 律 师 事 务 所 上 海 市 银 城 中 路 168 号 上 海 银 行 大 厦 1705 室 (200120) 电 话 :8621-5012 2258 传 真 :8621-5012 2257
<4D6963726F736F667420576F7264202D2032303133C4EAB9A4B3CCCBB6CABFCAFDD1A7D7A8D2B5BFCEBFBCCAD4B4F3B8D9D3EBD2AAC7F3>
工 程 硕 士 数 学 考 试 大 纲 与 要 求 ( 包 括 高 等 数 学 和 线 性 代 数 ) 一 函 数 极 限 与 连 续 第 一 部 分 : 高 等 数 学 考 试 内 容 函 数 的 概 念 及 表 示 法 函 数 的 有 界 性 单 调 性 周 期 性 和 奇 偶 性 复 合 函 数 反 函 数 分 段 函 数 和 隐 函 数 基 本 初 等 函 数 的 性 质 及 其 图 形 初
抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 % # % % % ) % % # # + #, ) +, % % % % % % % %
抗 战 时 期 国 民 政 府 的 银 行 监 理 体 制 探 析 王 红 曼 抗 战 时 期 国 民 政 府 为 适 应 战 时 经 济 金 融 的 需 要 实 行 由 财 政 部 四 联 总 处 中 央 银 行 等 多 家 机 构 先 后 共 同 参 与 的 多 元 化 银 行 监 理 体 制 对 战 时 状 态 下 的 银 行 发 展 与 经 营 安 全 进 行 了 大 规 模 的 设 计 与
目 录 第 一 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 硬 件 使 用 介 绍... 3 第 二 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 管 理 员 端 功 能 使 用 介 绍... 4 2.1 系 统 管 理 员 登 陆... 4 2.2 班
博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 使 用 说 明 书 制 作 : 北 京 博 导 前 程 信 息 技 术 有 限 公 司 目 录 第 一 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 硬 件 使 用 介 绍... 3 第 二 章 博 星 卓 越 电 子 商 务 营 销 策 划 实 践 平 台 管 理 员 端 功 能 使 用 介 绍... 4 2.1
第二部分 阅读理解(Part II Reabing Comprehension)
吉 林 省 成 人 本 科 学 士 学 位 日 语 统 一 考 试 大 纲 总 则 为 适 应 成 人 高 等 教 育 本 科 毕 业 生 申 请 学 士 学 位 外 语 统 一 考 试 的 要, 根 据 国 务 院 学 位 委 员 会 关 于 授 予 成 人 高 等 教 育 本 科 毕 业 生 学 士 学 位 暂 行 规 定 和 国 务 院 学 位 委 员 会 原 国 家 教 育 委 员 会 关
生产支援功能 使用说明书(IP-110 篇)
生 产 支 援 功 能 使 用 说 明 书 (IP-110 篇 ) 目 录!. 前 言...1 1. 概 要...1 2. 基 本 操 作 方 法...3 2-1. 信 息 模 式 和 通 常 缝 制 模 式 的 变 换...3 2-2. 信 息 模 式...4 2-3. 通 常 缝 制 模 式...5 @. 设 定 篇...6 1. 首 次 使 用 生 产 支 援 功 能 时 的 设 定 方 法...6
教师上报成绩流程图
教 务 管 理 系 统 使 用 说 明 学 生 端 用 户 1 在 校 内 任 何 一 台 连 接 校 园 网 的 计 算 机 上 登 录 教 务 处 主 页 教 务 处 主 页 地 址 : http://jw.stdu.edu.cn/homepage 随 后 点 击 按 钮 ( 见 下 图 所 示 ), 即 可 进 入 综 合 教 务 管 理 系 统 2 在 综 合 教 务 管 理 区 域 内 键
3 复 试 如 何 准 备 4 复 试 成 绩 计 算 5 复 试 比 例 6 复 试 类 型 7 怎 么 样 面 对 各 种 复 试 04 05
1 复 试 流 程 2 复 试 考 查 形 式 02 03 3 复 试 如 何 准 备 4 复 试 成 绩 计 算 5 复 试 比 例 6 复 试 类 型 7 怎 么 样 面 对 各 种 复 试 04 05 2 怎 样 给 导 师 留 下 良 好 的 第 一 印 象 把 握 进 门 时 机 1 面 试 中 穿 着 的 瞒 天 过 海 3 无 声 胜 有 声 的 肢 体 语 言 育 4 眼 睛 是 心
(Microsoft Word - NCRE\314\345\317\265\265\367\325\37313\324\27221\272\3051.doc)
川 教 考 院 2013 21 号 全 国 计 算 机 等 级 考 试 调 整 方 案 2011 年 7 月, 教 育 部 考 试 中 心 组 织 召 开 了 第 五 届 全 国 计 算 机 等 级 考 试 NCRE 考 委 会 会 议, 会 议 完 成 NCRE 考 委 会 换 届 选 举, 并 确 定 了 下 一 步 改 革 和 发 展 的 目 标 在 新 的 历 史 时 期,NCRE 将 以
ETF、分级基金规模、份额变化统计20130816
ETF 分 级 基 金 规 模 份 额 变 化 统 计 截 至 上 周 末, 全 市 场 股 票 型 ETF 规 模 约 1451 亿, 份 额 约 1215 亿,ETF 总 份 额 及 规 模 的 周 变 动 值 分 别 为 -23-44 亿, 份 额 与 规 模 均 下 降 ; 分 级 基 金 规 模 约 438 亿, 份 额 572 亿, 总 份 额 及 规 模 的 周 变 动 值 分 别 为
一 开 放 性 的 政 策 与 法 规 二 两 岸 共 同 的 文 化 传 承 三 两 岸 高 校 各 自 具 有 专 业 优 势 远 见 杂 志 年 月 日
河 北 师 范 大 学 学 报 新 时 期 海 峡 两 岸 高 校 开 放 招 生 问 题 探 讨 郑 若 玲 王 晓 勇 海 峡 两 岸 高 校 开 放 招 生 是 新 时 期 推 进 海 峡 两 岸 高 等 教 育 交 流 与 合 作 的 重 要 尝 试 系 统 梳 理 改 革 开 放 以 来 两 岸 招 生 政 策 与 就 学 人 数 发 展 变 化 的 历 史 进 程 可 发 现 促 进 两
微软用户
学 生 空 间 用 户 操 作 手 册 目 录 前 言... 2 一 登 录 学 生 空 间... 2 二 学 生 空 间 页 面... 3 三 功 能 区... 3 3.1 课 程 学 习... 5 3.2 学 务 管 理... 7 3.3 学 习 档 案... 7 3.4 资 料 管 理... 8 3.7 课 程 班 级... 11 3.8 我 要 评 价... 11 四 交 流 互 动...
Microsoft Word - 资料分析练习题09.doc
行 测 高 分 冲 刺 练 习 题 资 料 分 析 ( 共 15 题, 参 考 时 限 10 分 钟 ) 材 料 题 - 1 2012 年 1 月 某 小 区 成 交 的 二 手 房 中, 面 积 为 60 平 方 米 左 右 的 住 宅 占 总 销 售 套 数 的 ( ) A.25% B.35% C.37.5% 长 沙 市 雨 花 区 侯 家 塘 佳 天 国 际 大 厦 北 栋 20 楼 第 1
全国教师资格认定管理信息系统
操 作 说 明 一 教 师 资 格 认 定 申 请 人 1 : 1. 未 参 加 全 国 统 考 申 请 人 2.1 登 录 未 参 加 全 国 统 考 申 请 人 网 上 报 名 系 统 登 录 中 国 教 师 资 格 网 (http://www.jszg.edu.cn), 未 参 加 全 国 统 考 申 请 人 有 两 种 途 径 进 入 报 名 系 统 第 一 种 途 径 : 点 击 网 站
<443A5C6D B5C30312EB9A4D7F7CEC4B5B55C30322EBACFCDACCEC4B5B55C C30342EC8CBC9E7CCFC5C31332ECFEEC4BFC5E0D1B55C E30385C322EB2D9D7F7CAD6B2E12E646F63>
浙 江 职 业 能 力 建 设 信 息 系 统 职 业 技 能 鉴 定 考 务 管 理 用 户 操 作 手 册 二 〇 一 五 年 八 月 目 录 0. 系 统 概 述...3 0.0. 简 要 概 述...3 0.1. 业 务 流 程 图... 3 1. 考 生 网 上 报 名... 3 1.0. 考 生 用 户 注 册 登 录... 5 1.1. 报 名 及 下 载 打 印 报 名 申 请 表...7
课程类 别
美 声 演 唱 方 向 培 养 方 案 一 培 养 目 标 本 方 向 要 求 学 生 德 智 体 美 全 面 发 展, 培 养 能 在 文 艺 团 体 从 事 声 乐 演 唱 及 能 在 艺 术 院 校 从 事 本 方 向 教 学 的 高 级 门 人 才 二 培 养 规 格 本 方 向 学 生 应 系 统 掌 握 声 乐 演 唱 方 面 的 理 论 和 技 能, 具 备 较 高 的 声 乐 演 唱
untitled
( 一 ) 深 刻 认 识 学 习 教 育 的 重 大 意 义 : - 3 - ( 二 ) 明 确 学 习 教 育 的 任 务 目 标 ( 三 ) 把 握 特 点 方 法 - 4 - ( 四 ) 坚 持 六 项 原 则 在 - 5 - ( 五 ) 着 力 解 决 问 题 - 6 - - 7 - - 8 - ( 一 ) 学 党 章 党 规, 进 一 步 明 确 党 员 标 准 树 立 行 为 规 范
正 规 培 训 达 规 定 标 准 学 时 数, 并 取 得 结 业 证 书 二 级 可 编 程 师 ( 具 备 以 下 条 件 之 一 者 ) (1) 连 续 从 事 本 职 业 工 作 13 年 以 上 (2) 取 得 本 职 业 三 级 职 业 资 格 证 书 后, 连 续 从 事 本 职 业
1. 职 业 概 况 1.1 职 业 名 称 可 编 程 师 1.2 职 业 定 义 可 编 程 师 国 家 职 业 标 准 从 事 可 编 程 序 控 制 器 (PLC) 选 型 编 程, 并 对 应 用 进 行 集 成 和 运 行 管 理 的 人 员 1.3 职 业 等 级 本 职 业 共 设 四 个 等 级, 分 别 为 : 四 级 可 编 程 师 ( 国 家 职 业 资 格 四 级 ) 三
用节点法和网孔法进行电路分析
运 用 节 点 法 和 网 孔 法 进 行 电 路 分 析 众 所 周 知, 运 用 基 尔 霍 夫 定 律 和 欧 姆 定 律, 我 们 可 以 对 任 何 一 个 电 路 进 行 分 析, 以 确 定 其 运 行 条 件 ( 电 流 和 电 压 值 ) 一 般 电 路 分 析 的 难 点 在 于 用 最 少 的 联 立 方 程 描 述 电 路 的 运 行 特 性 在 这 一 讲 里, 我 们 将
<4D6963726F736F667420576F7264202D2050485035C3E6CFF2B6D4CFF3A3A8B5DAC8FDD5C220C0E0CCD8D0D4A3A92E646F63>
第 三 章 PHP5 面 向 对 象 高 级 类 特 性 这 一 周 来 正 好 白 天 没 课, 赶 出 来 这 章 宝 宝 出 生 将 近 一 个 月, 快 10 斤 重 了 宝 宝 快 张 大, 你 想 编 程 么? 宝 宝 妈 说, 做 这 个 行 业 太 累 了 刀 客 羽 朋 于 石 家 庄 2006-11-23 1 目 录 3.1 static 变 量 方 法...3 3.1.1 静
名 称 生 命 科 学 学 院 083001 环 境 科 学 1 生 物 学 仅 接 收 院 内 调 剂, 初 试 分 数 满 足 我 院 生 物 学 复 试 最 低 分 数 线 生 命 科 学 学 院 071300 生 态 学 5 生 态 学 或 生 物 学 生 命 科 学 学 院 040102
华 中 师 范 大 学 2016 年 接 收 校 内 外 优 秀 硕 士 研 究 生 调 剂 信 息 表 名 称 经 济 与 工 商 管 理 学 院 020101 政 治 经 济 学 1 经 济 学 类 毕 业 学 校 与 报 考 学 校 不 低 于 我 校 办 学 层 次 经 济 与 工 商 管 理 学 院 020105 世 界 经 济 学 1 经 济 学 类 毕 业 学 校 与 报 考 学 校
随着执业中医师资格考试制度的不断完善,本着为我校中医学专业认证服务的目的,本文通过对我校中医类毕业生参加2012年和2013年的中医执业医师考试成绩及通过率、掌握率进行分析,并与全国的平均水平进行差异比较分析,以此了解我校执业中医师考试的现状,进而反映我校中医类课程总体教学水平,发现考核知识模块教学中存在的不足,反馈给相关学院和教学管理部门,以此提高教学和管理水平。
2012-2013 中 医 类 别 执 业 医 师 综 合 笔 试 成 绩 分 析 反 馈 报 告 教 务 处 二 零 一 三 年 三 月 1 目 录 1 前 言 3 2 2012-2013 中 医 类 别 执 业 医 师 综 合 笔 试 成 绩 分 析 反 馈 报 告 4 附 件 1:2012 年 中 医 类 别 医 师 资 格 综 合 笔 试 院 校 学 科 成 绩 分 析 报 告 附 件 2:2013
目 录 一 激 活 账 号... 2 二 忘 记 密 码 后 如 何 找 回 密 码?... 3 三 如 何 管 理 学 校 信 息 及 球 队 学 生 教 师 等 信 息... 6 四 如 何 发 布 本 校 校 园 文 化?... 11 五 如 何 向 教 师 发 送 通 知?... 13 六
一 刻 校 园 足 球 管 理 平 台 使 用 说 明 ( 学 校 管 理 员 版 ) 一 刻 软 件 科 技 有 限 公 司 目 录 一 激 活 账 号... 2 二 忘 记 密 码 后 如 何 找 回 密 码?... 3 三 如 何 管 理 学 校 信 息 及 球 队 学 生 教 师 等 信 息... 6 四 如 何 发 布 本 校 校 园 文 化?... 11 五 如 何 向 教 师 发 送
工 程 勘 察 资 质 标 准 根 据 建 设 工 程 勘 察 设 计 管 理 条 例 和 建 设 工 程 勘 察 设 计 资 质 管 理 规 定, 制 定 本 标 准 一 总 则 ( 一 ) 本 标 准 包 括 工 程 勘 察 相 应 专 业 类 型 主 要 专 业 技 术 人 员 配 备 技 术
住 房 和 城 乡 建 设 部 关 于 印 发 工 程 勘 察 资 质 标 准 的 通 知 建 市 [2013]9 号 各 省 自 治 区 住 房 和 城 乡 建 设 厅, 北 京 市 规 划 委, 天 津 上 海 市 建 设 交 通 委, 重 庆 市 城 乡 建 设 委, 新 疆 生 产 建 设 兵 团 建 设 局, 总 后 基 建 营 房 部 工 程 局, 国 务 院 有 关 部 门 建 设 司,
珠江钢琴股东大会
证 券 代 码 :002678 证 券 简 称 : 珠 江 钢 琴 公 告 编 号 :2015-038 广 州 珠 江 钢 琴 集 团 股 份 有 限 公 司 2015 年 年 度 股 东 大 会 决 议 公 告 本 公 司 及 董 事 会 全 体 成 员 保 证 信 息 披 露 的 内 容 真 实 准 确 完 整, 没 有 虚 假 记 载 误 导 性 陈 述 或 重 大 遗 漏 特 别 提 示 :
朱 丽 明 柯 美 云 周 丽 雅 袁 耀 宗 罗 金 燕 候 晓 华 陈 旻 湖 滥 用 安 非 他 命 会 增 加 得 心 脏 病 的 风 险 据 美 国 科 技 新 闻 网 报 道 根 据 纽 约 路 透 社 报 道 一 份 新 的 研 究 显 示 青 年 及 成 年 人 若 滥 用 安 非 他 命 会 增 加 得 心 脏 病 的 风 险 美 国 德 州 大 学 西 南 医 学 中 心
际 联 考 的 非 美 术 类 本 科, 提 前 批 本 科 体 育 类 第 一 批 第 二 批 第 三 批 的 理 工 类 和 文 史 类 本 科 平 行 志 愿, 考 生 可 以 填 报 6 所 院 校 志 愿 符 合 贫 困 地 区 专 项 计 划 和 农 村 考 生 专 项 计 划 报 考
第 四 部 分 平 行 志 愿 57. 什 么 是 平 行 志 愿?/ 32 58. 我 省 在 哪 个 批 次 实 行 平 行 志 愿? 考 生 最 多 可 以 填 报 几 所 院 校 志 愿?/ 32 59. 第 一 二 三 批 本 科 平 行 志 愿 如 何 投 档?/ 32 60. 艺 术 本 科 ( 二 ) 艺 术 本 科 ( 三 ) 和 体 育 本 科 的 平 行 志 愿 如 何 投 档?/
Cybozu Garoon 3 管理员手册
附 录 D 数 据 的 输 入 样 式 数 据 的 种 类 和 输 入 字 符 的 值 等, 在 Garoon3 的 页 面 输 入 的 数 据 样 式 如 下 所 示 基 本 系 统 客 户 信 息 法 人 姓 名 字 符 串 ( 00 法 人 姓 名 ( 拼 音 ) 字 符 串 ( 00 图 标 (URL) 字 符 串 ( 255 应 用 程 序 新 名 称 字 符 串 ( 00 用 户 姓 名
伊 犁 师 范 学 院 611 语 言 学 概 论 全 套 考 研 资 料 <2016 年 最 新 考 研 资 料 > 2-2 语 言 学 纲 要 笔 记, 由 考 取 本 校 本 专 业 高 分 研 究 生 总 结 而 来, 重 点 突 出, 借 助 此 笔 记 可 以 大 大 提 高 复 习 效
伊 犁 师 范 学 院 611 语 言 学 概 论 全 套 考 研 资 料 ......2 伊 犁 师 范 学 院 802 文 学 概 论 全 套 考 研 资 料 ......2 伊 犁 师 范 学 院 702 普 通 物 理 全 套 考 研 资 料 ......3 伊 犁
Excel basics
Excel 基 础 知 识 Excel 是 功 能 强 大 的 电 子 表 格 和 数 据 分 析 应 用 程 序, 然 而 若 要 最 有 效 地 使 用 它, 必 须 首 先 了 解 这 些 基 础 知 识 本 教 程 介 绍 一 些 可 以 在 所 有 工 作 薄 中 使 用 的 任 务 和 功 能 开 设 之 前... 1 1. 创 建 新 空 白 工 作 薄... 2 2. 浏 览 Excel
<4D6963726F736F667420576F7264202D20BFC9B1E0B3CCD0F2BFD8D6C6CFB5CDB3C9E8BCC6CAA6B9FABCD2D6B0D2B5B1EAD7BC2E646F63>
国 家 职 业 标 准 1 可 编 程 序 控 制 系 统 设 计 师 国 家 职 业 标 准 1. 职 业 概 况 1.1 职 业 名 称 可 编 程 序 控 制 系 统 设 计 师 1.2 职 业 定 义 从 事 可 编 程 序 控 制 器 (PLC) 选 型 编 程, 并 对 应 用 系 统 进 行 设 计 集 成 和 运 行 管 理 的 人 员 1.3 职 业 等 级 本 职 业 共 设 四
目 录 页 1. 欢 迎 使 用 网 上 预 约 面 谈 访 问 系 统... 3 2. 新 用 户... 4 2.1 新 用 户 登 入 帐 户 程 序... 4 2.2 启 动 网 上 预 约 面 谈 访 问 帐 户... 5 2.2.1 核 对 帐 户 的 地 址 资 料... 5 2.2.2
网 上 预 约 面 谈 访 问 使 用 指 南 香 港 特 别 行 政 区 政 府 统 计 处 目 录 页 1. 欢 迎 使 用 网 上 预 约 面 谈 访 问 系 统... 3 2. 新 用 户... 4 2.1 新 用 户 登 入 帐 户 程 序... 4 2.2 启 动 网 上 预 约 面 谈 访 问 帐 户... 5 2.2.1 核 对 帐 户 的 地 址 资 料... 5 2.2.2 阅
一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起
县 乡 两 级 的 政 治 体 制 改 革 如 何 建 立 民 主 的 合 作 新 体 制 县 乡 人 大 运 行 机 制 研 究 课 题 组 引 言 一 从 分 封 制 到 郡 县 制 一 从 打 虎 亭 汉 墓 说 起 二 密 县 在 周 初 是 两 个 小 国 密 国 和 郐 国 三 密 县 的 第 一 任 县 令 卓 茂 四 明 清 时 代 的 密 县 二 从 集 中 的 动 员 体
合 并 计 算 配 售 对 象 持 有 多 个 证 券 账 户 的, 多 个 证 券 账 户 市 值 合 并 计 算 确 认 多 个 证 券 账 户 为 同 一 配 售 对 象 持 有 的 原 则 为 证 券 账 户 注 册 资 料 中 的 账 户 持 有 人 名 称 有 效 身 份 证 明 文 件
深 圳 市 场 首 次 公 开 发 行 股 票 网 下 发 行 实 施 细 则 ( 征 求 意 见 稿 ) 第 一 章 总 则 第 一 条 为 规 范 深 圳 市 场 首 次 公 开 发 行 股 票 网 下 发 行 行 为, 根 据 证 券 发 行 与 承 销 管 理 办 法 及 相 关 规 定, 制 定 本 细 则 第 二 条 本 细 则 所 称 网 下 发 行 是 指 首 次 公 开 发 行 股
第 六 章 债 券 股 票 价 值 评 估 1 考 点 一 : 债 券 价 值 的 影 响 因 素 2
Professional Accounting Education Provided by Academy of Professional Accounting (APA) CPA 财 务 管 理 习 题 班 第 八 讲 债 券 股 票 价 值 评 估 IreneGao ACCAspace 中 国 ACCA 国 际 注 册 会 计 师 教 育 平 台 Copyright ACCAspace.com
火车浏览器脚本制作教程
火 车 浏 览 器 脚 本 管 理 器 操 作 文 档 火 车 浏 览 器 的 脚 本 管 理 器 是 生 成 具 体 执 行 的 各 种 脚 本, 然 后 由 项 目 管 理 器 进 行 调 用 脚 本 管 理 器 中 定 义 了 执 行 脚 本 的 细 节 和 流 程, 项 目 管 理 器 可 以 通 过 修 改 脚 本 运 行 时 的 参 数 变 量, 实 现 批 量, 自 动 化 的 运 行
3 月 30 日 在 中 国 证 券 报 上 海 证 券 报 证 券 时 报 证 券 日 报 和 上 海 证 券 交 易 所 网 站 上 发 出 召 开 本 次 股 东 大 会 公 告, 该 公 告 中 载 明 了 召 开 股 东 大 会 的 日 期 网 络 投 票 的 方 式 时 间 以 及 审
北 京 市 君 致 律 师 事 务 所 关 于 浪 潮 软 件 股 份 有 限 公 司 2015 年 度 股 东 大 会 的 法 律 意 见 书 致 : 浪 潮 软 件 股 份 有 限 公 司 北 京 市 君 致 律 师 事 务 所 ( 以 下 简 称 本 所 ) 受 浪 潮 软 件 股 份 有 限 公 司 ( 以 下 简 称 公 司 ) 的 委 托, 指 派 律 师 出 席 2016 年 4 月
作 为 生 产 者 式 文 本 的 女 性 主 义 通 俗 小 说 梅 丽 本 文 借 鉴 文 化 研 究 理 论 家 约 翰 费 斯 克 的 生 产 者 式 文 本 这 一 概 念 考 察 女 性 主 义 通 俗 小 说 的 文 本 特 征 写 作 策 略 和 微 观 政 治 意 义 女 性 主 义 通 俗 小 说 通 过 对 传 统 通 俗 小 说 的 挪 用 和 戏 仿 传 播 女 性 主 义
反 学 校 文 化 与 阶 级 再 生 产 小 子 与 子 弟 之 比 较 周 潇 作 者 通 过 对 北 京 某 打 工 子 弟 学 校 的 田 野 调 查 后 发 现 在 农 民 工 子 弟 中 间 盛 行 着 类 似 学 做 工 中 所 描 述 的 工 人 阶 级 小 子 的 反 学 校 文 化 但 是 由 于 制 度 安 排 与 社 会 条 件 的 差 异 子 弟 与 小 子 的 反 学 校
第3章 创建数据库
第 3 章 创 建 数 据 库 要 点 3.1 Access 2002 开 发 环 境 3.2 数 据 库 的 创 建 3.3 创 建 表 3.4 字 段 操 作 3.5 设 定 表 关 系 3.6 操 作 记 录 3.7 数 据 的 导 入 和 导 出 3.1 Access 2002 开 发 环 境 Access 与 许 多 常 用 的 数 据 库 管 理 系 统, 如 Access 常 用 的
超 级 玛 丽 JAVA 小 游 戏 测 试 报 告 1. 导 言 1.1 编 写 目 的 该 文 档 的 目 的 是 描 述 超 级 玛 丽 JAVA 小 游 戏 的 系 统 测 试 的 总 结 报 告, 其 主 要 内 容 包 括 : 系 统 环 境 的 介 绍 功 能 的 实 现 的 测 试
超 级 玛 丽 游 戏 测 试 报 告 目 录 1. 导 言... 2 1.1 编 写 目 的... 2 1.2 项 目 范 围... 2 1.3 参 考 资 料... 2 1.4 缩 写 说 明... 2 1.5 术 语 定 义... 2 1.6 版 本 更 新 信 息... 3 2. 测 试 设 计... 3 2.1 测 试 要 点... 3 2.2 测 试 时 间 地 点 人 员... 3 2.3
