使用Windows 8 SDK编译Windows 7
(这个问题以zlib为例,但不是特定的.)
我正在尝试使用它附带的MSVC项目文件在Windows上编译zlib.我正在使用VS2012和Windows 8 SDK,但我的构建机器是Windows 7. Zlib包含以下代码: #ifdef IOWIN32_USING_WINRT_API if ((filename!=NULL) && (dwDesiredAccess != 0)) hFile = CreateFile2((LPCTSTR)filename,dwDesiredAccess,dwShareMode,dwCreationDisposition,NULL); #else if ((filename!=NULL) && (dwDesiredAccess != 0)) hFile = CreateFile((LPCTSTR)filename,NULL,dwFlagsAndAttributes,NULL); #endif 其中IOWIN32_USING_WINRT_API设置如下 #if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API))) #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) #define IOWIN32_USING_WINRT_API 1 #endif #endif WINAPI_FAMILY_PARTITION和WINAPI_PARTITION_APP在Windows 8 SDK(winapifamily.h)中定义,因此结果是可以编译在zlib中使用CreateFile2的代码. 我可以编译zlib,但是任何尝试加载它的应用程序都会失败,因为它找不到CreateFile2,这是正确的,因为我的机器是Windows 7并且该API是在Windows 8中引入的. 这是我第一次在较低版本的Windows上使用Windows SDK而不是它支持,因此我的问题是: 我唯一可以使用补丁zlib来检查_WIN32_WINNT> = _WIN32_WINNT_WIN8到第一行,并将/ D_WIN32_WINNT = _WIN32_WINNT_WIN7传递给msbuild?这意味着我必须构建两组二进制文件 – 一组支持Win7(通过传递/ D)和一组支持Win8(不传递/ D). 是否没有办法在Windows 7和8上运行兼容的公共二进制文件,如果在Windows 8上运行,则使用CreateFile2代码路径? (我想这种方式是GetProcAddress函数指针.还有别的吗?)
您可以使用_WIN32_WINNT选择要定位的操作系统版本.这是破解的zlib检查. WINAPI_FAMILY_DESKTOP_APP包含WINAPI_FAMILY_APP,因此它们的检查总是成功.您可以修复它:
#if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API))) #if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY_DESKTOP_APP,WINAPI_PARTITION_APP) #define IOWIN32_USING_WINRT_API 1 #endif #endif 有关详细信息,请参阅此处:http://social.msdn.microsoft.com/Forums/en-US/winappswithnativecode/thread/3965645c-978c-4148-b32c-1853f7fd22b3 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- windows-8 – Windows8:设备标识符
- windows-server-2008-r2 – 为什么Window的SSL Cipher-Suit
- windows-server-2008-r2 – 使用WSUS的Windows Server 2008
- 属性 – msiexec不会将参数传递给自定义操作
- windows – 如何在OU中保持本地管理员密码一致?
- windows – 在软件/补丁安装期间跟踪系统更改
- 如何隐藏桌面的特定捷径
- 使程序记住Windows Server R2中的优先级
- windows – 如何从tar文件加载docker镜像
- microsoft-metro – Metro UI Multibinding?
- Windows – QT5字体渲染在各种平台上不同
- windows-7 – Windows 7可以做软件RAID 10(1 0)
- windows – PE和ELF二进制代码差异
- windows-7 – 如何获取目录连接的实际文件夹路径
- Windows Service Plus GUI / C#
- windows-phone-7 – 如何将SystemTray Progressb
- windows-7 – 持续缓慢的域登录/文件夹重定向
- windows – 如何管理服务帐户凭据(密码)?
- windows-server-2008 – 如何监控Windows进程的工
- windows-server-2012-r2 – 在启用了配额的故障转