NMAKE : fatal error U1077:

本文介绍了在Windows10x64环境下使用VS2013编译GmSSL遇到的编译错误及警告,包括语法错误、数据类型转换可能导致的数据丢失等问题,并提供了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在 Windows 10 x64 上使用 VS 2013 编译 64 位的 GmSSL 的时候出现以下错误:

 

ssl\statem\statem_gmtls.c(1387) : error C2449: 在文件范围内找到“{”(是否缺少函数头?)
ssl\statem\statem_gmtls.c(1485) : error C2059: 语法错误:“}”

NMAKE : fatal error U1077: “C:\MyProgramFiles\VS2013\VC\BIN\x86_amd64\cl.EXE”: 返回代码“0x2”

如下所示:

 

        cl  /I "." /I "include" -DOPENSSL_USE_APPLINK -DDSO_WIN32 -DNDEBUG -DOPENSSL_THREADS -DOPENSSL_NO_STATIC_ENGINE -DOPENSSL_PIC -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DRC4_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DGHASH_ASM -DECP_NISTZ256_ASM -DPADLOCK_ASM -DGMI_ASM -DPOLY1305_ASM "-DENGINESDIR=\"C:\\Program Files\\GmSSL\\lib\\engines-1_1\"" "-DOPENSSLDIR=\"C:\\Program Files\\Common Files\\SSL\"" -W3 -wd4090 -Gs0 -GF -Gy -nologo -DOPENSSL_SYS_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -D_CRT_SECURE_NO_DEPRECATE -DUNICODE -D_UNICODE /MD /O2 /Zi /Fdossl_static -c /Fossl\statem\statem_gmtls.obj "ssl\statem\statem_gmtls.c"
statem_gmtls.c
ssl\statem\statem_gmtls.c(237) : warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(282) : warning C4267: “函数”: 从“size_t”转换到“long”,可能丢失数据
ssl\statem\statem_gmtls.c(476) : warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(528) : warning C4244: “+=”: 从“__int64”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(604) : warning C4244: “=”: 从“__int64”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(659) : warning C4267: “函数”: 从“size_t”转换到“unsigned int”,可能丢失数据
ssl\statem\statem_gmtls.c(892) : warning C4267: “函数”: 从“size_t”转换到“unsigned int”,可能丢失数据
ssl\statem\statem_gmtls.c(980) : warning C4267: “+=”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(1005) : warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(1010) : warning C4267: “-=”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(1058) : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
ssl\statem\statem_gmtls.c(1231) : warning C4267: “函数”: 从“size_t”转换到“unsigned int”,可能丢失数据
ssl\statem\statem_gmtls.c(1387) : error C2449: 在文件范围内找到“{”(是否缺少函数头?)
ssl\statem\statem_gmtls.c(1485) : error C2059: 语法错误:“}”
ssl\statem\statem_gmtls.c(1585) : warning C4013: “gmtls_sm2_derive”未定义;假设外部返回 int
ssl\statem\statem_gmtls.c(1637) : warning C4267: “函数”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(1676) : warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(1785) : warning C4267: “函数”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(1823) : warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(1943) : warning C4267: “函数”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(1964) : warning C4267: “=”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(2048) : warning C4267: “函数”: 从“size_t”转换到“int”,可能丢失数据
ssl\statem\statem_gmtls.c(2164) : warning C4013: “gmtls_construct_cke_sm2dhe”未定义;假设外部返回 int
NMAKE : fatal error U1077: “C:\MyProgramFiles\VS2013\VC\BIN\x86_amd64\cl.EXE”: 返回代码“0x2”
Stop.

解决办法:

在使用 nmake 命令的后面加上 /I 选项:

nmake /I

就能够编译通过了(虽然还是会报 error),但是编译出来的可执行文件是可以使用的。

参考:

https://msdn.microsoft.com/en-us/library/dt309377.aspx

 

 

 

 

### 编译或运行过程中的致命错误 U1077 和状态码 0x2 的解决方案 在开发环境中遇到致命错误 `U1077` 并伴随状态码 `0x2`,通常表明存在严重的配置问题或环境设置不兼容的情况。以下是对此类问题的分析和可能的解决方法。 #### 错误背景 此类错误可能是由于编译器或运行时环境未能正确初始化所导致。具体来说,状态码 `0x2` 表明程序尝试执行的操作失败,通常是由于文件路径、权限或其他外部依赖未被满足所致[^1]。 #### 可能的原因 1. **环境变量配置不当** 如果系统的 PATH 或其他相关环境变量未正确定义,则可能导致工具链无法找到必要的可执行文件或库文件。 2. **链接器或编译器版本冲突** 使用不同版本的编译器或链接器可能会引发不兼容问题,尤其是在多平台或多架构环境下工作时。 3. **目标文件损坏或丢失** 若项目所需的某些中间文件(如 `.obj` 文件)已损坏或缺失,则会触发类似的致命错误。 4. **操作系统级别的限制** 特定于操作系统的资源分配问题也可能引起此错误,比如内存不足或者句柄耗尽等问题。 #### 解决方案 针对上述原因,可以采取以下措施来解决问题: - **验证并修复环境变量** 确认所有必需的目录均已加入到系统的 PATH 中,并且这些路径指向的是最新版软件安装位置。可以通过命令行测试关键组件是否存在以及能否正常启动来进行初步排查。 - **统一构建工具版本** 尽量保持整个项目的构建流程中使用的各种工具处于同一版本系列下,避免混用旧新版本带来的潜在风险。例如,在 Microsoft Visual Studio 下建议始终选用一致的服务包更新级别[^2]。 - **清理重建工程** 删除现有的临时生成物后再重新进行全面构建往往能够消除因残留数据引起的异常状况。这一步骤可通过 IDE 提供的功能完成,也可以手动删除对应输出目录再调用 make 命令实现[^3]。 - **增加调试信息输出** 修改现有脚本以便获取更多关于崩溃前后的上下文细节,这样有助于定位确切发生地点及其背后逻辑缺陷所在之处。对于 C/C++ 应用而言,启用更详细的警告选项(-Wall -Wextra)同样很有帮助。 ```bash make clean && make all ``` 以上提到的方法均旨在改善基础条件从而减少再次遭遇同类情况的可能性;然而如果经过多次调整仍然无果的话,则有必要联系技术支持团队寻求进一步指导了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值