Какова цель _GLOBAL__I_? - PullRequest
       2

Какова цель _GLOBAL__I_?

0 голосов
/ 06 августа 2010

У меня есть две функции, объявленные следующим образом, использующие extern "C", чтобы избежать искажения имени.

#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

1 Ответ

1 голос
/ 06 августа 2010

Мне кажется, что две функции имеют правильные имена (две с предшествующими 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
...