NMAKE : fatal error U1077:

在 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

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章