[ 永远的UNIX::UNIX技术资料的宝库 ]

首页 > 编程技术 > C/C++ > 正文

用gcc 编译,为何有不同的结果 (关于socket函数)?

来源:本文出自:http://www.pcworld.com.cn 作者: (2001-08-29 10:00: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.fanqiang.com)



 
 相关文章

★  感谢所有的作者为我们学习技术知识提供了一条捷径  ★
www.fanqiang.com