2010-08-06 3 views
0

У меня есть две функции, объявленные как следующие, используя extern "C", чтобы избежать манипуляции с именем.Какова цель _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 

EDIT:

Найти что-то здесь. Однако пока нет четкого ответа.

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

ответ

1

Он смотрит на меня как две функций имеют правильные имена (два предшествует Т), а третий символ (предшествует т) создаются для ГЦСА внутреннего использования.

Они были переупорядочены, хотя.

// 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 
Смежные вопросы