Что означает «Нераспознанный класс хранения 111 для символа .text` ._XXXXXXXXX »? - PullRequest
0 голосов
/ 05 августа 2011

Я получаю это сообщение об ошибке много раз при попытке выполнить objdump моего исполняемого файла или общей библиотеки, скомпилированной в AIX 5.3. Для любого другого исполняемого файла на этой машине он работает нормально. Этот исполняемый файл также аварийно завершает работу во время выполнения (при назначении строки).

Я не уверен, имеет ли это значение, но во время связи у меня есть несколько предупреждений, таких как: ld: 0711-224 ВНИМАНИЕ: Дубликат символа: не виртуальный преобразователь в XYZ :: ~ XYZ () Весь исполняемый файл создается непосредственно из файлов .o (и одной внешней библиотеки, но я уверен, что все в порядке).

Что-то подсказывает мне, что это может быть связано со слабыми символами, но я понятия не имею, как решить эту проблему. Любая идея, что может быть не так или что еще я могу проверить, чтобы продолжить это?

Я также попытался включить все файлы cpp в один большой файл и затем скомпилировать это. Я все еще получаю ошибку сегментации, но в другом месте (теперь в g_strXXXXX.erase () - стирание глобальной строки). Часть трассировки стека выглядит так:

(...)

. # 3 0x101d8534 в __static_initialization_and_destruction_0 (int, int) (__initialize_p = 1, __priority = 65535) в ../../licserver/someclass1.cpp:4

. # 4 0x101d8df0 в GLOBAL _I_fc_softc () в ../../shared/someclass1.cpp:225

. # 5 0x103c81fc в GLOBAL _FI_licserver_unittest ()

. # 6 0xd03aadb0 в mod_init1 () из /usr/lib/libc.a(shr.o)

. # 7 0xd03aacc4 в __modinit () из /usr/lib/libc.a(shr.o)

. # 8 0x100001d4 в __start () (gdb) GLOBAL _I_fc_softc

Так выглядит какая-то проблема с libc или libstdc ++?

1 Ответ

0 голосов
/ 08 августа 2011

Вы были на самом деле правы, Джон, спасибо большое!В моем коде была проблема "фиаско статического порядка инициализации".После замены всех подозрительных глобальных объектов вызовами функций проблема, похоже, решена.

Итак, я изменил:

CFoo g_F;

на:

CFoo& GetF() {
  static CFoo F;
  return F;
}

И теперь все нормально.Для этой части кода мне не нужна поддержка многопоточности, в противном случае я бы использовал синглтон, как мне кажется (слишком много кода, чтобы просто избавиться от глобальных переменных).

...