mawk的rand()自动种子初始化行为变更及恢复方法咨询
解决mawk 1.3.4-20250131版本macOS下rand()固定输出的问题(无需调用srand())
问题背景
在mawk 1.3.4-20240905及更早版本中,启动时会自动初始化随机数生成器,调用rand()会输出不同数值,编译时可通过--disable-init-srand关闭该行为。但1.3.4-20250131版本(仅macOS受影响,Linux无此问题,Homebrew编译版本也存在该问题)取消了自动初始化,无论编译配置如何,每次启动调用rand()都会输出相同值,且该变更未文档化,易导致依赖随机数的程序异常。
无需调用srand()的恢复方案
- 升级到修复后的版本:该问题已在2026年1月30日的官方更新中修复,直接升级mawk到该日期之后的版本即可恢复旧版自动初始化随机数的行为,无需修改代码。
- 手动编译修复后的源码:如果无法直接升级,可获取官方修复后的源码,在macOS系统上使用clang重新编译(编译命令示例:
./configure && make && make install),测试环境(24.3.0 Darwin Kernel + clang-1600.0.26.6)下编译无报错。
内容的提问来源于stack exchange,提问作者Andre Wildberg
相关产品推荐
相关产品推荐

