| 用gcc 编译,为何有不同的结果 (关于socket函数)? |
| 出自:http://www.pcworld.com.cn 2002年01月06日 14:00 |
---- 我 使 用 的 是Sun 工 作 站, 安 装 的 是Solaris 7 操 作 系 统。 在 我 使 用gcc 进 行 网 络 编 程 时,
编 译 的 时 候 没 有 出 现 错 误 提 示, 但 是 在 编 译 后, 系 统 却 提 示 我 所 有 的socket 函 数 没 有
定 义, 因 此 程 序 不 能 运 行, 可 是 我 确 实 在 源 程 序 中 已 经 使 用 了include 语 句 把 应 该 调 用
的 网 络 库 全 都 加 进 去 了, 为 什 么 还 有 问 题 呢 ? 奇 怪 的 是, 同 样 的 源 程 序, 我 在Linux 6.0
上 编 译 时 就 可 以 通 过, 说 明 程 序 本 身 没 有 问 题, 是 否 是 我 的Solaris 7 操 作 系 统 的 问 题 呢 ?
---- 这 并 不 是Solaris 7 的 问 题, 而 是 两 个 操 作 系 统 之 间 的 差 异 造 成 的。Solaris 7 和Linux 6.0
虽 然 同 属 于Unix 系 统, 但 是 还 是 有 很 大 的 区 别, 就 拿C 编 译 器gcc 来 说,Solaris 7 的gcc 比
Linux 6.0 上 的gcc 在 语 法 要 求 上 要 严 格 得 多, 而 且 在 编 译 时,Solaris 7 的gcc 要 求 输 入 库 文 件,
而Linux 6.0 则 不 用。 您 在Solaris 7 上 遇 到 的 情 况 就 是 因 为 在 编 译 时, 没 有 指 明 加 入 应 调 用
的socket 库, 而 在Linux 6.0 则 会 自 动 加 入, 不 需 您 设 置, 所 以 可 以 编 译 通 过。 就 这 一 点 来 说,
Linux 6.0 的gcc 要 方 便 一 些。 如 果 是 在Solaris 7 上 编 译, 应 该 在gcc 后 面 加 入"-lsocket" 的 选 项。
注 意"-l" 和"socket" 中 间 没 有 空 格。 如 果 在 编 译 时 还 提 示 有 某 些 函 数 没 有 定 义, 则 应 再 加
入"-lnsl" 选 项。 比 如, 假 设 您 的 源 程 序 名 为test.c, 则 在 编 译 时 应 输 入 如 下 的 命 令:
---- gcc -lsocket -lnsl test.c
---- 这 样 程 序 就 可 以 在Solaris 7 编 译 通 过 了。
|
| 【】【http://www.trainlinux.com】【Close】 |