You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenWatcom C编译器中common symbols的使用方法问询

如何在OpenWatcom C编译器编译的C源代码中使用COMMON(公共)符号?

COMMON符号的核心特性是允许同一符号在多个编译单元中被声明/定义,但最多仅一个单元提供非零初始化的定义。以下是针对OpenWatcom环境的测试与解决方案:

GCC环境的对比参考

使用GCC配合-fcommon参数编译测试代码(以fwptr为示例符号,对应w1o.c和w2o.c两个源文件)时,可实现预期逻辑:单独编译w1o.c输出FW1,同时编译两个文件时输出FW2。需注意,这是GCC的非标准行为——C标准明确此类重复定义属于编译错误,启用-fno-common参数可让GCC遵循标准规范。

OpenWatcom C编译器的限制

使用OpenWatcom的owcc编译上述两个C文件时,会触发redefinition of _fwptr ignored的警告,最终运行结果始终为FW1。通过dmpobj查看w1o.obj的结构可知,owcc将fwptr放入_BSS段,以PUBDEF386记录符号,并未生成COMMON符号对应的COMDEF记录。

实现COMMON符号的可行方案

OpenWatcom的汇编器wasm和链接器wlink支持COMMON符号:编写汇编文件w1oc.asm,通过COMM _fwptr:DWORD:1声明COMMON符号,使用wasm编译该汇编文件后,即可配合C代码实现预期的COMMON符号特性。

结论

OpenWatcom的C编译器(wcc386)不支持直接通过C源代码生成COMMON符号,并非使用方式有误。若要在C项目中利用COMMON符号的特性,需要通过汇编代码定义符号后再在C中引用。

内容的提问来源于stack exchange,提问作者pts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:35:10