我有几个x86和x64库,其中许多是汇编代码,或者没有源代码,它们是为x86上的__cdecl堆栈约定和微软在amd64上的x64调用约定(RCX、RDX、R8、R9)构建的。使用gcc/g++将它们从COFF32转换为ELF32,将COFF64转换为ELF64,并链接到fine。x86函数原型使用__attribute__((cdecl, regparm(0)))并且可以完美地工作。但是,默认情况下,Linux上的x64使用不同的x64调用约定(RDI、RSI、RDX、RCX、R8、R9)。我似乎找不到如何告诉gcc/g++使用微软使用的备用x64调用约定?似乎只有两种不同的x64调用方法,我希望在gcc/g++中存在类似__attribute__((regparm(msx64)))的方法。gcc/g++是否支持交替调用约定?
蒂娅!!
发布于 2016-01-28 15:57:42
正如马克·格利西在评论中指出的那样。答案是__attribute__((ms_abi))
现在效果很好。
https://stackoverflow.com/questions/35052984
复制相似问题