我正在使用相同的源重新编译 C++ 二进制文件。操作系统是 Windows Server 2008 R2,编译器是 Microsoft Visual Studio 2005。
之后,我正在运行dumpbin.exe /ALL /DISASM /RAWDATA:NONE
并比较输出。反汇编没有区别,但匿名命名空间中的某些名称被破坏的方式有所不同。
例如对于 .cpp 文件中的以下定义:
namespace {
TCHAR l_pszSlashes[] = _T("\\/");
}
我可以有以下变化:
?l_pszSlashes@?A0x79ec3b0d@@3PA_WA (wchar_t * `anonymous namespace'::l_pszSlashes)
?l_pszSlashes@?A0xa9cc3791@@3PA_WA (wchar_t * `anonymous namespace'::l_pszSlashes)
仅当我比较新构建的 dll 和另一台机器上的旧 dll 时,才会出现差异。如果我在同一台 PC 上编译这个 dll,我没有这个区别。
所以问题是:这个名字中的十六进制数字部分是什么意思?为什么这个十六进制数字部分在某些情况下是不同的?我如何编译这个项目以使这些名称相同。