C Windows、ARM以及“包含\共享”和“包含\ um”之间的区别?
我正在使用VS2012 ARM Cross Tools命令提示符从命令行编译源代码。我发现我需要添加C Windows、ARM以及“包含\共享”和“包含\ um”之间的区别?,c,compiler-construction,windows-phone-8,arm,windows-rt,C,Compiler Construction,Windows Phone 8,Arm,Windows Rt,我正在使用VS2012 ARM Cross Tools命令提示符从命令行编译源代码。我发现我需要添加\u ARM\u WINAPI\u PARTITION\u DESKTOP\u SDK\u AVAILABLE,以使项目开始编译 许多文件编译得很干净。例如: cl /Fotmp32dll\fips_drbg_selftest.obj -Iinc32 -Itmp32dll /MD /Ox /O2 /O b2 -DOPENSSL_FIPSCANISTER -DOPENSSL_THR
\u ARM\u WINAPI\u PARTITION\u DESKTOP\u SDK\u AVAILABLE
,以使项目开始编译
许多文件编译得很干净。例如:
cl /Fotmp32dll\fips_drbg_selftest.obj -Iinc32 -Itmp32dll /MD /Ox /O2 /O
b2 -DOPENSSL_FIPSCANISTER -DOPENSSL_THREADS -DDSO_WIN32 -D_ARM_WINAPI_PARTITIO
N_DESKTOP_SDK_AVAILABLE -DOPENSSL_USE_APPLINK -I. -DOPENSSL_NO_RC5 -DOPENSSL_NO_
MD2 -DOPENSSL_NO_KRB5 -DOPENSSL_FIPS -DOPENSSL_NO_JPAKE -DOPENSSL_NO_STATIC_ENGI
NE /Zi /Fdtmp32dll/lib -D_WINDLL -c .\fips\rand\fips_drbg_selftest.c
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.60315.1 for ARM
Copyright (C) Microsoft Corporation. All rights reserved.
fips_drbg_selftest.c
cl /Fotmp32dll\fips_drbg_rand.obj -Iinc32 -Itmp32dll /MD /Ox /O2 /Ob2 -
DOPENSSL_FIPSCANISTER -DOPENSSL_THREADS -DDSO_WIN32 -D_ARM_WINAPI_PARTITION_DE
SKTOP_SDK_AVAILABLE -DOPENSSL_USE_APPLINK -I. -DOPENSSL_NO_RC5 -DOPENSSL_NO_MD2
-DOPENSSL_NO_KRB5 -DOPENSSL_FIPS -DOPENSSL_NO_JPAKE -DOPENSSL_NO_STATIC_ENGINE /
Zi /Fdtmp32dll/lib -D_WINDLL -c .\fips\rand\fips_drbg_rand.c
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.60315.1 for ARM
...
现在我遇到了一个宏重新定义问题(编译了大约25个文件之后):
我看到INCLUDE
envar既有INCLUDE\shared
又有INCLUDE\um
路径:
INCLUDE=C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\INCLUDE;C:\Progra
m Files (x86)\Microsoft Visual Studio 11.0\VC\ATLMFC\INCLUDE;C:\Program Files (x
86)\Windows Kits\8.0\include\shared;C:\Program Files (x86)\Windows Kits\8.0\incl
ude\um;C:\Program Files (x86)\Windows Kits\8.0\include\winrt;
当我看到差异时,警告是次要的:
// shared/windosck.h
#define AF_IPX 6 /* IPX and SPX */
#define AF_NS 6 /* XEROX NS protocols */
// um/ws2def.h
#define AF_NS 6 // XEROX NS protocols
#define AF_IPX AF_NS // IPX protocols: IPX, SPX, etc.
但这些错误有着重大区别:
// shared/ws2def.h:
typedef struct sockaddr {
#if (_WIN32_WINNT < 0x0600)
u_short sa_family;
#else
ADDRESS_FAMILY sa_family; // Address family.
#endif //(_WIN32_WINNT < 0x0600)
CHAR sa_data[14]; // Up to 14 bytes of direct address.
} SOCKADDR, *PSOCKADDR, FAR *LPSOCKADDR;
// um/winsock.h
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
//共享/ws2def.h:
类型定义结构sockaddr{
#如果(_WIN32_WINNT<0x0600)
u_short Sau家族;
#否则
ADDRESS_FAMILY sa_FAMILY;//ADDRESS FAMILY。
#endif/(\u WIN32\u WINNT<0x0600)
CHAR sa_data[14];//最多14字节的直接地址。
}SOCKADDR,*PSOCKADDR,FAR*LPSOCKADDR;
//嗯/winsock.h
结构sockaddr\u in{
小仙姑家族;
u_短sinu端口;
结构输入地址sin地址;
char sin_zero[8];
};
include\shared
和include\um
之间有什么区别?这两个目录中可能有不同的标题。由于某些原因,您的代码试图包含不兼容的组合。谢谢Carl。什么是‘嗯’?我有点习惯于将标题放在一个地方(给予或接受)。从标题中的注释中,我猜测“UM”是用户模式:“此文件包含Winsock2规范的核心定义,可供用户模式和内核模式模块使用。”
// shared/ws2def.h:
typedef struct sockaddr {
#if (_WIN32_WINNT < 0x0600)
u_short sa_family;
#else
ADDRESS_FAMILY sa_family; // Address family.
#endif //(_WIN32_WINNT < 0x0600)
CHAR sa_data[14]; // Up to 14 bytes of direct address.
} SOCKADDR, *PSOCKADDR, FAR *LPSOCKADDR;
// um/winsock.h
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};