首先,所有这些都是使用MS VS完成的。
程序崩溃
“过程入口点?FunName @ ClassName @@ QAE_NXZ不能位于动态链接库XXX.dll中”
我在依赖行者中打开了XXX.dll,我能找到的是
FunName @ ClassName @@ QBE_NXZ,不是FunName @ ClassName @@ QAE_NXZ。
我知道重建XXX.dll将解决此问题,但是QBE_NXZ和QAE_NXZ有什么区别?
C ++名称修饰也是编译器特定的吗?
最佳答案
您可以使用Visual Studio附带的undname.exe
实用程序来取消名称拼写。在这种情况下:
C:\>undname "?FunName@ClassName@@QAE_NXZ"
Undecoration of :- "?FunName@ClassName@@QAE_NXZ"
is :- "public: bool __thiscall ClassName::FunName(void)"
C:\>undname "?FunName@ClassName@@QBE_NXZ"
Undecoration of :- "?FunName@ClassName@@QBE_NXZ"
is :- "public: bool __thiscall ClassName::FunName(void)const "
如您所见,区别在于成员函数是否为
const
。名称修饰是特定于编译器的。对于GCC,您可以使用
c++filt
程序取消名称拼写。关于c++ - C++命名重组:QBE_NXZ QAE_NXZ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13707980/