есть 3 файла.
1.h:
#ifndef H
#define H
const char a []= "a";
#endif
1.c и 2.c:
#include "1.h"
компилируем: gcc -c 1.c && gcc -c 2.c
объеденяем: gcc -shared 1.o 2.o
получаем ошибку:
multiple definition of `a`
если скомпилировать и "объеденить" с помощью g++ - то ошибка не выдается, однако в получившейся библиотеке получается два символа a:
$ nm a.out| grep "r a"
00000734 r a
00000738 r a
я конечно понимаю, что компилятору неоткуда знать сколько сишных файлов я буду компилировать, и чем отличаются два символа с одним именем в одном объектнике, но все же g++ справляется с этим, а gcc нет?
насколько я понял компиляция g++ от gcc отличается только вызовом препроцессора с различными define'ами и вызовом либо cc1 либо cc1plus.
так почему такую возможность не реализовали в gcc?
Понятно, что один из вариантов решения вопроса символов с одинаковыми именами - создать столько копий, сколько упоминаний, но почему не происходит оптимизация?
заметил на версии 2.95.4, проверял на 4.0.3 - та же штука.