c++的64位名称篡改
64bit name mangling for c++
我有一段代码,它有以下行
#pragma comment(linker, "/include:_test@12")
当我使用配置类型为32位的C++Visual Studio 2010编译代码时,使用此代码的项目运行良好(我也在32位的windows机器上)。
当我将计算机更改为64位并使用x64配置(使用C++Visual Studio 2010进行编译)时,我收到了一个链接错误。
32位和64位的C++名称篡改不同吗?如果是,我在哪里可以找到64位C++名称篡改约定?
是的,名称篡改在32位和64位之间是不同的。这里可以找到一篇涵盖确切格式的合理文章。然而,只需编译到两个目标并检查生成的映射文件,就可以很快地判断出主要的差异。根据我的经验,它们几乎完全相同(64位添加了一个小数据,可能会改变其他数据)。
简单示例:void foo();
32bit: ?foo@A@@QAEXXZ
64bit: ?foo@A@@QEAAXXZ
对于未损坏的std调用,根据参数堆栈的使用情况,长度后缀可能会有很大的不同。VC++的默认64位设置不加下划线,也不编码长度后缀。以下是使用纯开箱即用设置编译的32/64位配置:
extern "C" int _stdcall func2(int, int, char*);
32bit: _func2@12
64bit: func2
没有什么意义,是吗。
完成电路,解开_cdecl,完成以下操作:
extern "C" int _cdecl func2(int, int, char*);
32bit: _func2
64bit: func2
如果他们似乎不遗余力地让你知道你在进口或出口什么,那么证据表明你可能是正确的。
相关文章:
- 将应用程序从32位移植到64位时出现问题
- 64位机器上的C++内存对齐
- qmake:检测目标位宽(32 位或 64 位)
- 如何在 64 位 vb.net Windows 应用程序中引用 32 位 dll
- Qt 5.11.2 (Clang 8.0 (Apple), 64 位), 找不到 QJSEngine 文件
- 在 64 位边界上对齐C++结构数组?
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 在 64 位的 c++ 中运行 mstest 测试
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 浮点数为 32 位和 64 位二进制表示形式
- 是否有 64 位等效于 GetLastInputInfo / LASTINPUTINFO?
- 所有可能的链接生成器与64位密钥
- WinAPI C++如何从 64 位应用程序加载资源
- 在 c++ 中输出 64 位整数
- 使用192/256位整数求和无符号64位整数向量的点积的最快方法
- 如何在 64 位平台上计算 32 位哈希C++?
- 使用 SysNative 在 Visual Studio 中创建 64 位应用程序
- 在 64 位整数内旋转(90°)位矩阵(最多 8x8 位)
- 64 位进程中的 AnyCPU C# DLL 无法引用 64 位C++ DLL(给出错误:无法加载文件或程序集)
- 将代码从 32 位迁移到 64 位时出现问题 Visual Studio 2010