gpt4 book ai didi

c++ - 两个经过修饰的名称分解为相同的函数签名

转载 作者:行者123 更新时间:2023-11-28 00:34:59 24 4
gpt4 key购买 nike

我有一个 spidermonkey 库,它为函数 JS_DefineProperty 导出以下损坏的符号:

_Z17JS_DefinePropertyP9JSContextP8JSObjectPKcN2JS5ValueEPFiS0_NS5_6HandleIS2_EENS7_I4jsidEENS5_13MutableHandleIS6_EEEPFiS0_S8_SA_iSC_Ej

当我尝试编译一个使用这个函数的文件时,外部引用被编译为:

_Z17JS_DefinePropertyP9JSContextP8JSObjectPKcN2JS5ValueEPFiS0_NS5_6HandleIS2_EENS7_IlEENS5_13MutableHandleIS6_EEEPFiS0_S8_S9_iSB_Ej

两者的名字结尾略有不同。我通过一个名称分解器运行了它们,它们都得出了相同的签名:

JS_DefineProperty(JSContext*, JSObject*, char const*, JS::Value, int (*)(JSContext*, JS::Handle, JS::Handle, JS::MutableHandle), int (*)(JSContext*, JS::Handle, JS::Handle, int, JS::MutableHandle), unsigned int)

因此,我对两者之间的区别感到有些困惑。我相信这两个版本都是使用 g++ 4.7 编译的。任何人都可以解码名称中的额外差异,以便我可以进一步调查吗?

最佳答案

两者其实是有区别的。

_Z17JS_DefinePropertyP9JSContextP8JSObjectPKcN2JS5ValueEPFiS0_NS5_6HandleIS2_EENS7_I4jsidEENS5_13MutableHandleIS6_EEEPFiS0_S8_SA_iSC_Ej分解为:

JS_DefineProperty(JSContext*, JSObject*, char const*, JS::Value, int (*)(JSContext*, JS::Handle<JSObject*>, JS::Handle<jsid>, JS::MutableHandle<JS::Value>), int (*)(JSContext*, JS::Handle<JSObject*>, JS::Handle<jsid>, int, JS::MutableHandle<JS::Value>), unsigned int)

_Z17JS_DefinePropertyP9JSContextP8JSObjectPKcN2JS5ValueEPFiS0_NS5_6HandleIS2_EENS7_IlEENS5_13MutableHandleIS6_EEEPFiS0_S8_S9_iSB_Ej分解为:

JS_DefineProperty(JSContext*, JSObject*, char const*, JS::Value, int (*)(JSContext*, JS::Handle<JSObject*>, JS::Handle<long>, JS::MutableHandle<JS::Value>), int (*)(JSContext*, JS::Handle<JSObject*>, JS::Handle<long>, int, JS::MutableHandle<JS::Value>), unsigned int)

前者在哪里使用 JS::Handle<jsid> ,后者正在使用 JS::Handle<long> .

关于c++ - 两个经过修饰的名称分解为相同的函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284752/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com