加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c的64位名称修改

发布时间:2020-12-16 04:58:21 所属栏目:百科 来源:网络整理
导读:我有一些代码,其中包含以下行 #pragma comment(linker,"/include:_test@12") 当我使用配置类型为32位的C Visual Studio 2010编译代码时,使用此代码的项目工作正常(我也在32位Windows机器上). 当我将机器更改为64位并使用使用C Visual Studio 2010编译的x64配
我有一些代码,其中包含以下行
#pragma comment(linker,"/include:_test@12")

当我使用配置类型为32位的C Visual Studio 2010编译代码时,使用此代码的项目工作正常(我也在32位Windows机器上).

当我将机器更改为64位并使用使用C Visual Studio 2010编译的x64配置时,我收到链接错误.

对于32位和64位,C名称是否有所不同?如果是这样,我在哪里可以找到64位C名称修改约定?

解决方法

是的,名称重整在32位和64位之间是不同的.一篇涵盖确切格式的合理文章可以是 found here.您可以很快地告诉主要差异,但是,只需编译两个目标并检查生成的地图文件.根据我的经验,它们几乎相同(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

那里没什么特别的,有.

完成电路,unmangled _cdecl,这样做:

extern "C" int _cdecl func2(int,char*);

32bit: _func2
64bit: func2

如果看起来他们不顾一切地让你知道你在拉出或出口的东西,证据表明你可能是正确的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读