_GLOBAL__I_的用途是什么?

问题描述:

我有两个函数声明如下,使用extern "C" aming来避免名称混乱。_GLOBAL__I_的用途是什么?

#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开头)为GCCS内部使用而创建的。

虽然他们已被重新排序。

// 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