Я работаю над голым -железным кортексом -M3 на C++ для удовольствия и прибыли. Я использую библиотеку STL, так как мне нужны контейнеры. Я думал, что простое предоставление моего распределителя не добавит много кода в окончательный двоичный файл, поскольку вы получаете только то, что используете.
На самом деле я даже не ожидал никакого процесса связывания с STL. (отдал свой аллокатор ), так как я думал, что это все шаблонный код.
Кстати, я компилирую с -fno-exception
.
К сожалению, к моему двоичному файлу добавляется около 600 КБ или более. Я посмотрел, какие символы включены в окончательный двоичный файл с помощью nm, и мне это показалось шуткой. Список такой длинный, что я не буду пытаться пройти мимо него.Хотя есть и слабые символы.
Я также посмотрел файл.map, сгенерированный компоновщиком, и даже нашел символы scanf
.text
0x000158bc 0x30 /CodeSourcery/Sourcery_CodeBench_Lite_for_ARM_GNU_Linux/bin/../arm-none-linux-gnueabi/libc/usr/lib/libc.a(sscanf.o)
0x000158bc __sscanf
0x000158bc sscanf
0x000158bc _IO_sscanf
И:
$ arm-none-linux-gnueabi-nm binary | grep scanf
000158bc T _IO_sscanf
0003e5f4 T _IO_vfscanf
0003e5f4 T _IO_vfscanf_internal
000164a8 T _IO_vsscanf
00046814 T ___vfscanf
000158bc T __sscanf
00046814 T __vfscanf
000164a8 W __vsscanf
000158bc T sscanf
00046814 W vfscanf
000164a8 W vsscanf
Как я могу отладить это? Для начала я хотел понять, что именно GCC использует для линковки (Я линкую через GCC ). Я знаю, что если символ находится в текстовом сегменте, то весь сегмент используется, но все же это слишком много.
Любое предложение о том, как решить эту проблему, будет действительно оценено.
Спасибо