| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > GNU toolchain > Компилятор MinGW: Две функции с одинаковыми |
| Автор: Lotrex 5.4.2006, 19:30 | ||||||
| Точнее, код одной функции помещается в exe-файл либо дважды, либо.. черт его знает, что происходит.. Написал я один тест для проверки одного класса. Вся эта бодяга компилилась в mingw командой gcc -c -O0 -g3 -Wall. Все исходники прилагаются в архиве вот тут: http://jamwarrior.narod.ru/sources/test.tar.gz (хотел пристыковать архив к сообщению - не получилось Когда я зашел в gdb и выполнил команду info functions, сред и прочих сообщений были следующие:
Что, по две одинаковых функции линкер запихнул в exe-шник? Дабы прояснить данный вопрос, я набрал:
Ну тут ладно, пока усе номално. После этого решил набрать:
Тута у меня волосы на голове зашевелились... |
| Автор: threef 6.4.2006, 13:31 | ||
Может в этом все дело - начало и конец блока ? |
| Автор: NiJazz 6.4.2006, 16:41 |
| Lotrex, используй пространства имён (namsepaces). |
| Автор: Lotrex 6.4.2006, 18:04 | ||||
Народ, видимо не понял, в чем дело... Или я не понял, при чем тут namespaces... Со строкой 26 пример не показателен, поскольку там стоит просто пустой конструктор, а со строкой 27 файла ifiles.cpp, выглядящей так:
все абсолютно так же - при вызове двух разнотипных команд об одной и той же функции выдается разная информация. Странно то, что код, который находится в исходнике на одной строке (к примеру, на 28 строке этого несчастного ifiles.cpp) имеет как бы 2 разных начала и два разных конца - в одном случае выдается сообщение: "Line 28 of "ifiles.cpp" starts at address 0x4021e2 <_ZN6tifileC1EPKc> and ends at 0x402226 <_ZN6tifileC1EPKc+68>.", а в другом случае - сообщение "Line 28 of "ifiles.cpp" starts at address 0x401cf4 <_ZN6tifileC2EPKc> and ends at 0x401d38 <_ZN6tifileC2EPKc+68>."). Конечно, на выполнении самой проги это не сказывается. Дело в том, что я сделал оболочку для gdb, везде все нормально, но в таких вот "парных" функциях не проставляются точки останова. Иногда - проставляются, но только командой break <имя функции>, а точку останова, поставленную командой break <имя файла>:<номер строки> программа благополучно пролетает. Причем это не глюк моей оболочки - если "ручками" попытатся поставить бряк через <имя ф-ла>:<номер строки> - результат абсолютно такой же. Вот я и думаю - может, можно как-то прогу откомпилить, что бы таких "парных" функций не было. Просто попробуйте откомпилить мои файлы в mingw с отладочными опциями, и сами увидите, что происходит. |