Что означает этот нм выход?
У меня есть общий объектный файл, созданный с использованием g++, как показано ниже.
g++ -shared -fPIC -lpthread -O1 -std=c++11 -c AOTelemetry.cpp -L /home -I /opt/java7/include/ -I /opt/java7/include/linux/ -lstdc++ -ldl -lcsfutil -lcsfthread -ldata -lservices -lserviceutil -levent -lhealth -o AOTelemetry.so
Утилита nm при запуске в объектном файле отображает множество ссылок на адреса памяти (я так думаю) в виде нулей. Что это значит?
0000000000000000 V typeinfo name for std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>
0000000000000000 V vtable for ProcessJob
0000000000000000 V vtable for NativePlugin
0000000000000000 V vtable for AOTelemetryPlugin
0000000000000000 V vtable for Shutdown
0000000000000000 V vtable for BdtBuffer
U vtable for __cxxabiv1::__class_type_info
U vtable for __cxxabiv1::__si_class_type_info
0000000000000000 V vtable for std::_Sp_counted_ptr<ProcessJob*, (__gnu_cxx::_Lock_policy)2>
0000000000000000 V vtable for std::_Sp_counted_ptr<Shutdown*, (__gnu_cxx::_Lock_policy)2>
0000000000000000 V vtable for std::_Sp_counted_ptr<BdtBuffer*, (__gnu_cxx::_Lock_policy)2>
0000000000000000 V vtable for std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>
1 ответ
Решение
Я бы порекомендовал прочитать справочную страницу или единственный учебник / документацию о nm
,
Из этого урока:
Команды nm предоставляют информацию о символах, используемых в объектном файле или исполняемом файле. Информация по умолчанию, которую предоставляет команда "nm":
- Виртуальный адрес символа
- Символ, который изображает тип символа. Если символ в нижнем регистре, то символ является локальным, но если символ в верхнем регистре, то символ является внешним
- Название символа