VS2022 CLI编译OpenSSL 3.0(含FIPS)触发LNK1108错误
OpenSSL 3.0 FIPS 编译 Windows 平台链接错误问题
尝试编译OpenSSL 3.0以获取FIPS合规能力,按文档要求安装了Strawberry Perl和NASM,已将NASM加入VS开发者CLI路径,以管理员权限执行以下命令:
perl Configure enable-fips nmake nmake install
首次解压源码后,perl Configure和nmake执行成功,但nmake install构建http_test.exe时失败,报致命错误LNK1108: cannot write file at 0x0。此前test目录已有成功写入的文件,权限问题可能性极低。
系统环境
- Windows 10 19045.2846
- 12核CPU,32GB内存(剩余17GB),1TB M.2 SSD(剩余155GB)
- VS2022(17.4.5)、Strawberry Perl(5.32.1)、NASM(2.16.01)
- OpenSSL 3.0.0(2023年5月3日下载)
排查过程
- 重新解压源码编译非FIPS版本无问题,但FIPS编译后续执行
nmake时也开始失败,所有测试组件编译均卡在同一环节。 - 执行
nmake test同样在构建http_test.exe时失败,因FIPS合规要求所有测试必须通过,无法跳过该步骤。 - Linux Debian 11平台编译正常,但无法在Windows运行,且FIPS合规要求必须在目标平台编译,不能通过交叉编译解决。
- 已花费8小时搜索解决方案,暂时无法访问GitHub提交OpenSSL Issue。
- 在Makefile的LDFLAGS中添加
/verbose后,链接输出显示"Finished pass 2"后报错。 - 注意到Makefile中
hmactest.exe使用libcrypto_static,而http_test.exe使用libcrypto;修改http_test.exe的依赖为libcrypto_static后,错误变为**"cannot write file at 0xA0000"**。 - 尝试切换到VS2019开发者CLI编译,仍报相同错误。
- link.exe返回错误码0x454,未找到对应含义;用dumpbin查看相关.obj文件未发现异常。
补充疑问与新发现
今日再次执行FIPS编译的nmake,日志显示http_test.exe无错误,但输出目录中并未生成该文件。观察编译脚本逻辑:先删除manifest,再执行链接,最后根据manifest生成exe,推断链接器未生成manifest导致exe未生成。
同时存在两个疑问:
nmake install为何要重建整个test目录,而非仅补建缺失的http_test.exe?- 链接器在
nmake执行时静默失败(日志无报错但无exe生成),但在nmake install时总是明确报错,执行序列一致但结果不同,原因是什么?
内容的提问来源于stack exchange,提问作者Ragnorok
相关产品推荐
相关产品推荐

