TLDR:问题在底部。
我正在尝试从命令行为Windows Phone 8编译一个库。我已经准备好了所有的硬件和软件。作为一项测试,我成功地从Visual Studio解决方案创建了一个测试库。
当我尝试从命令行编译该文件时,我得到了以下结果。环境是使用Visual Studio的"ARM Phone Tools Command Prompt“设置的。
C:\Users\Jeffrey Walton\Desktop\openssl-fips-2.0.5>"C:\Program Files (x86)\Micro
soft Visual Studio 11.0\VC\WPSDK\WP80\bin\x86_arm\CL.exe" -DFIPS_START -Iinc32 -
Itmp32dll -DOPENSSL_FIPSCANISTER -DOPENSSL_THREADS -DDSO_WIN32 -D_CRT_SECURE_NO_
DEPRECATE /AI"C:\Program Files (x86)\Windows Phone Kits\8.0\Windows Metadata" /D
_USRDLL /D NDEBUG /D _WINDLL /D WINAPI_FAMILY=WINAPI_FAMILY_PHONE_APP /fp:precis
e -DOPENSSL_USE_APPLINK -I. -DOPENSSL_NO_RC5 -DOPENSSL_NO_MD2 -DOPENSSL_NO_KRB5
-DOPENSSL_FIPS -DOPENSSL_NO_JPAKE -DOPENS -DSSL_NO_STATIC_ENGINE -c .\fips\fips_
canister.c
fips_canister.c
C:\Program Files (x86)\Windows Phone Kits\8.0\include\ws2tcpip.h(1032) : fatal e
rror C1083: Cannot open include file: 'wspiapi.h': No such file or directory我在Visual Studio安装目录和Phone Kit目录中都找不到wspiapi.h。当我查看ws2tcpip.h时,我看到了这一点:
// Unless the build environment is explicitly targeting only
// platforms that include built-in getaddrinfo() support, include
// the backwards-compatibility version of the relevant APIs.
//
#if !defined(_WIN32_WINNT) || (_WIN32_WINNT <= 0x0500)
#include <wspiapi.h>
#endif在ws2tcpip.h中,看起来大多数条件编译都是围绕_WIN32_WINNT >= 0x0600进行的。
当我检查<winsdkver.h>时,我看到了以下内容(但没有为Windows phone8定义):
// _WIN32_WINNT version constants
//
...
#define _WIN32_WINNT_VISTA 0x0600
#define _WIN32_WINNT_WS08 0x0600
#define _WIN32_WINNT_LONGHORN 0x0600
#define _WIN32_WINNT_WIN7 0x0601
#define _WIN32_WINNT_WIN8 0x0602我的问题是:我是否应该强制将<winsdkver.h>包含在/FI中(或者其他一些头文件来设置版本);或者我应该将_WIN32_WINNT定义为_WIN32_WINNT_WIN8?我知道原力包括作品。(无论它的价值是什么,Visual Studio并没有遭受同样的痛苦,它也没有对其中的一些定义做任何特殊的事情)。
发布于 2013-11-05 04:18:06
我按照您在Visual Studio中使用Windows phone8的building the OpenSSL library时建议的方式定义了_WIN32_WINNT=_WIN32_WINNT_WIN8 -它似乎在模拟器(Win32)和设备(ARM)上都工作/运行得很好。不确定这是否回答了你的问题,但至少它给了你更多的信息。
https://stackoverflow.com/questions/18070188
复制相似问题