1

TLDR:问题在底部。

我正在尝试从 Windows Phone 8 的命令行编译一个库。我拥有所有硬件和软件。作为测试,我成功地从 Visual Studio 解决方案创建了一个测试库。

当我尝试从命令行编译文件时,我得到以下信息。环境是使用 Visual Studio 的“ARM 电话工具命令提示符”设置的。

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

wspiapi.h我在 Visual Studio 安装目录和 Phone Kit 目录中都找不到。当我检查时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 Phone 8 定义):

// _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>with /FI(或其他一些标头来设置版本);还是我应该定义_WIN32_WINNT_WIN32_WINNT_WIN8?我知道力量包括作品。(就其价值而言,Visual Studio 并没有遭受同样的痛苦,并且它对其中一些定义没有做任何特别的事情)。

4

1 回答 1

1

我在 Visual Studio 中为 Windows Phone 8构建 OpenSSL 库_WIN32_WINNT=_WIN32_WINNT_WIN8时按照您的建议进行了定义- 它似乎在模拟器 (Win32) 和设备 (ARM) 上都可以正常工作/运行。不确定这是否回答了您的问题,但至少它为您提供了更多信息。

于 2013-11-04T20:18:05.570 回答