есть 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 - та же штука.
Ответ на:
комментарий
от dilmah
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Странное поведение gcc (2009)
- Форум gcc g++ (2005)
- Форум странное поведение... (2004)
- Форум gcc и g++ (2014)
- Форум сс, gcc, g++ (2019)
- Форум Компиляторы gcc,g++ (2001)
- Форум gcc, g++, cc (2005)
- Форум g++ vc gcc (2007)
- Форум Интересное поведение gcc (2012)
- Форум странное поведение DNS (2016)