gpt4 book ai didi

c++ - _GLOBAL__I_ 的目的是什么?

转载 作者:行者123 更新时间:2023-11-28 08:27:25 27 4
gpt4 key购买 nike

我有两个函数声明如下,使用 extern "C" aming 避免名称混淆。

#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT jobject JNICALL Java_com_trident_tv_si_SIManagerImpl_nGetServiceDetails
(JNIEnv *, jobject, jint);

JNIEXPORT jobject JNICALL Java_com_trident_tv_si_SIManagerImpl_nGetServiceCurrentEvent
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif

令人惊讶的是,第二个函数仍然有一个损坏的名称 _GLOBAL__I_Java_com_trident_tv_si_SIManagerImpl_nGetServiceCurrentEvent ,我想知道它的目的是什么以及为什么第一个函数没有生成一个?

00004d58 T Java_com_trident_tv_si_SIManagerImpl_nGetServiceCurrentEvent
0000533a T Java_com_trident_tv_si_SIManagerImpl_nGetServiceDetails
0000494f t _GLOBAL__I_Java_com_trident_tv_si_SIManagerImpl_nGetServiceCurrentEvent

编辑:

在这里找到一些东西。然而,目前还没有明确的答案。

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=12293

最佳答案

在我看来,这两个函数的名称是正确的(两个前面有 T ),并且创建了第三个符号(前面有 t)供 gcc 内部使用。

不过它们已经重新排序了。

// SECOND FUNCTION, T = exported and in TEXT section
00004d58 T Java_com_trident_tv_si_SIManagerImpl_nGetServiceCurrentEvent
// FIRST FUNCTION, T = exported and in TEXT section
0000533a T Java_com_trident_tv_si_SIManagerImpl_nGetServiceDetails
// INTERNAL symbol, t = non-exported symbol in TEXT section
0000494f t _GLOBAL__I_Java_com_trident_tv_si_SIManagerImpl_nGetS

关于c++ - _GLOBAL__I_ 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3421831/

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