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
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 は同じように苦しんでおらず、これらの定義のいくつかで特別なことをしていません)。