【发布时间】:2016-12-06 05:39:58
【问题描述】:
我正在尝试构建 Mypintool 示例,该示例附带用于 x64 架构的引脚分配。
我正在使用 pin3.0(构建 76991)和 Visual Studio 2012。如果我没有包含 windows.h,则构建成功。
但是如果我像这样包含window.h(在单独的命名空间中):-
namespace WD {
#include "Windows.h"
}
然后构建给出错误:-
C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h(3486): error C2888: '_CONTEXT::<unnamed-tag>' : symbol cannot be defined within namespace 'WD'
C:\Program Files (x86)\Windows Kits\8.0\Include\um\winnt.h(3488): error C2888: '_CONTEXT::<unnamed-tag>::<unnamed-tag>' : symbol cannot be defined within namespace 'WD'
另外,我能够构建带有windows.h 的win32 工具,没有任何问题。此外,我比较了 win32 和 x64 的构建设置,但找不到任何差异。
感谢任何帮助。
【问题讨论】:
-
不支持将 windows 标头包装在 c++ 命名空间内。如果它不起作用:不要这样做。
-
@ChrisBecke 将 windows 标头包装在 c++ 命名空间中对于为 win32 架构构建的 pintool 效果很好。这是 intel 提出的解决方案,因为 pin 与 winapi 名称有一些冲突。请参阅
Conflicts between Pin and Windows部分下的 pin 用户指南:software.intel.com/sites/landingpage/pintool/docs/76991/Pin/…。 -
然而,在 x64 位上,它失败了。明确告诉你它不能在 WD 命名空间中定义某些 windows 符号。没有比这更清楚的了。您可以在执行#include 之前尝试添加
#define WIN32_LEAN_AND_MEAN。这使得 windows.h 省略了一些可能允许它构建的可选内容。 -
@ChrisBecke 我知道我无法在 WD 命名空间中定义某些 Windows 符号。但我需要包含“windows.h”才能使用 Windows API。由于与 pin API 冲突,我无法直接执行此操作。我也试过
#define WIN32_LEAN_AND_MEAN,但同样的错误仍然存在。
标签: winapi visual-studio-2012 intel-pin