中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

中国DOS联盟论坛
现在时间是 2026-06-16 13:55
中国DOS联盟论坛 » DOS开发编程 & 发展交流 (开发室) » wattcp库无法连接问题 查看 1,842 回复 3
楼 主 wattcp库无法连接问题 发表于 2007-03-29 09:14 ·  中国 湖南 株洲 电信
新手上路
积分 12
发帖 5
注册 2007-03-29 08:15
UID 83272
性别 男
状态 离线
为什么我下的wattcp库没有办法连接
总是找不到函数
我实验ping.c
编译可以通过
但是就是没有办法连接成功~!
那些找不到的函数就是wattcp的库中的函数
我用的是bcc++3.1 但是我tcc3.0也试国了 一样的问题
不知道有没有遇到这种情况~~
[已使用 Gemini 解答]
Gemini 解答

在 Borland C++ 3.1 或 Turbo C 3.0 环境下使用 WATTCP(Waterloo TCP)库时,出现“编译通过但链接失败(找不到函数)”的现象,通常是由开发环境配置、内存模型不匹配或调试符号限制引起的。

1. 内存模型(Memory Model)不匹配

这是 DOS 时代 C 语言编程中最常见的链接错误原因。WATTCP 作为一个网络协议栈,逻辑较为复杂,通常被编译为 Large 内存模型。

  • 技术原理:在 16 位实模式下,Small 模型使用近指针(Near Pointer),而 Large 模型使用远指针(Far Pointer)。如果用户的工程(.prj)设置为了默认的 Small 模型,但引用的 wattcp.lib 是 Large 模型,编译器生成的函数调用约定与库中的符号定义不一致,导致 TLINK(Borland Linker)无法识别对应的导出符号。
  • 解决方法:在 IDE 的 Options -> Compiler -> Code Generation -> Model 中,必须选择与库文件一致的模型(通常是 Large)。

2. 调试符号限制与 Source Debugging 设置

回帖 PID 186351 中提到的将 Source Debugging 设置为 None 是针对 Borland 环境的一个特定限制的修正。

  • 技术背景:当 Source Debugging 选项开启时(默认通常为 OnStandalone),编译器和链接器会尝试在生成的可执行文件中包含行号信息和符号表以便于 IDE 内置调试器使用。
  • 失效原因:WATTCP 库通常体积较大,且包含大量外部符号。由于 Borland 16 位链接器在处理包含大量调试信息的第三方 .lib 文件时,可能会超出其内部符号表容量限制,或者因为库文件本身在编译时没有包含完整的调试信息,导致链接器在尝试重定位(Relocation)调试信息时出错。
  • 操作影响:关闭该选项后,链接器仅处理运行所需的代码和数据段,不再处理 DWARF 或类似的早期调试格式,从而绕过了符号溢出或不匹配的问题。

3. 项目工程文件(.PRJ)配置

在 Borland IDE 环境下,仅仅将库文件放入目录是不够的,必须显式告知链接器。

  • 配置方法:用户需要创建一个 .prj 文件,并将目标源代码(如 ping.c)和 WATTCP 的库文件(如 wattcp.libwattcpwl.lib,其中 wl 代表 WATTCP Large model)同时加入到工程列表中。
  • 命令行模式:如果使用 tccbcc 命令行,需要确保命令行包含了库路径,例如:
    bcc -ml ping.c wattcpwl.lib
    

4. 符号名称的大小写敏感性

Borland TLINK 默认是大小写敏感的。

  • 历史背景:WATTCP 是用 C 语言编写的。如果在 C++ 模式下编译(文件扩展名为 .cpp),编译器会对函数名进行“名改”(Name Mangling)。
  • 预防措施:确保在包含 WATTCP 头文件时使用 extern "C" 块,或者确保源文件扩展名为 .c 以强制使用标准 C 调用约定。

5. 库文件的搜索路径

如果 wattcp.lib 所在的路径没有包含在 Options -> Directories -> Library Directories 中,链接器同样会报找不到符号的错误。在 DOS 环境下,路径长度限制和环境变量(如 LIB)的配置也需严格遵守 8.3 文件名规范。

2 发表于 2007-03-30 05:12 ·  中国 湖南 株洲 电信
新手上路
积分 12
发帖 5
注册 2007-03-29 08:15
UID 83272
性别 男
状态 离线
可以了
工程的debug选项要禁止才可以
3 发表于 2007-04-10 11:00 ·  中国 江苏 南京 电信
新手上路
积分 2
发帖 1
注册 2007-04-10 10:40
UID 84613
性别 男
状态 离线
请问选项在哪里?我也遇到这个问题,找不到啊
4 发表于 2010-01-29 13:45 ·  中国 北京 联通
初级用户
积分 52
发帖 23
注册 2009-12-25 15:51
UID 157317
性别 男
状态 离线
迟到3年的回答,
__> to automanhxk

你的BC31, option->debugger,
把source debugging选为 none
默认是on
论坛跳转: