首先,所有这些都是使用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/

10-13 09:46