Ошибка препроцессора Solaris 10 CC приводит к появлению неопределенных символов

У меня есть очень очень простой файл C ++, как показано ниже,м на Solaris 5-10 с компилятором CC. Вот исходный код в моем файле myTest.C:

#include 
std::map myVar2;

Я хотел бы сначала запустить препроцессор CC для этого файла, изучить предварительно обработанный файл, а затем скомпилировать этот предварительно обработанный файл в объектный файл. Я называю этонепрямое компилирование», Для этого я делаю следующее:

% CC -P -o myFile_indirect.i myFile.C
% CC -c -o myFile_indirect.o myFile_indirect.i

Я также хотел бы скомпилировать этот файл без отдельного шага предварительной обработки, как это обычно делается. Я называю этопрямое компилирование», Для этого я делаю следующее:

% CC -c -o myFile_direct.o myFile.C

Теоретически myFile_direct.o и myFile_indirect.o должны быть функционально эквивалентными. Они, безусловно, должны содержать одинаковое количество символов в соответствующих таблицах символов, верно? Так что давайте's изучить их символы:

% gnm myFile_direct.o | c++filt > direct_symbols.txt
% gnm myFile_indirect.o | c++filt > indirect_symbols.txt
% wc -l *direct_symbols.txt
55 direct_symbols.txt
43 indirect_symbols.txt

Шокирующе, что непосредственно скомпилированный объектный файл содержит 12 символов, которые отсутствуют в косвенно скомпилированном файле. Зачем? Это кажется серьезной ошибкой для меня. Почему эти символы отсутствуют в косвенно скомпилированном файле? Если они не нужны, почему они включены в непосредственно скомпилированный файл? Isn»t прямая компиляция должна сначала выполнить ту же предварительную обработку и просто скрыть ее от пользователя? Что здесь происходит?

PS. Я неЯ не могу распознать двенадцать дополнительных символов и не понимаю, какова их цель:

00000010 T __rwstd::__rb_tree::__rb_tree_node*__rwstd::__rb_tree::__nil()
00000010 T __rwstd::__rb_tree::iterator __rwstd::__rb_tree::erase(__rwstd::__rb_tree::iterator)
00000010 T void __rwstd::__rb_tree::__erase(__rwstd::__rb_tree::__rb_tree_node*)
00000010 T __rwstd::__rb_tree::__rb_tree_node*&__rwstd::__rb_tree::__right(__rwstd::__rb_tree::__rb_tree_node*)
00000010 T __rwstd::__rb_tree::iterator&__rwstd::__rb_tree::iterator::operator++()
00000010 T __rwstd::__rb_tree::__rb_tree_node*__rwstd::__rb_tree::__maximum(__rwstd::__rb_tree::__rb_tree_node*)
00000010 T __rwstd::__rb_tree::__rb_tree_node*__rwstd::__rb_tree::__minimum(__rwstd::__rb_tree::__rb_tree_node*)
00000010 T __rwstd::__rb_tree::__rb_tree_node*&__rwstd::__rb_tree::__leftmost()
00000010 T __rwstd::__rb_tree::__rb_tree_node*&__rwstd::__rb_tree::__rightmost()
00000010 T void __rwstd::__rb_tree::__erase_leaf(__rwstd::__rb_tree::__rb_tree_node*)
00000010 T void __rwstd::__rb_tree::__rotate_left(__rwstd::__rb_tree::__rb_tree_node*)
00000010 T void __rwstd::__rb_tree::__rotate_right(__rwstd::__rb_tree::__rb_tree_node*)

Ответы на вопрос(1)

Ваш ответ на вопрос