emi*_*rax 10 c++ embedded linker gcc stl
我正在研究C++中的裸机皮质-3M,以获得乐趣和利润.我使用STL库,因为我需要一些容器.我认为通过简单地提供我的分配器,它不会为最终二进制文件添加太多代码,因为你只得到你使用的东西.
我实际上甚至没有想到任何链接过程与STL(给我的分配器),因为我认为这是所有模板代码.
-fno-exception顺便说一句,我正在编译.
不幸的是,我的二进制文件中添加了大约600KB或更多.我查找了最终二进制文件中包含哪些符号,这对我来说似乎是一个笑话.这份清单太长了,我不会试着过去.虽然有一些弱的符号.
我还查看了链接器生成的.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
Run Code Online (Sandbox Code Playgroud)
和:
$ 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
Run Code Online (Sandbox Code Playgroud)
我该怎么调试呢?首先,我想了解GCC究竟用于链接(我通过GCC链接).我知道如果在文本段中找到符号,则使用整个段,但仍然太多了.
任何关于如何解决这个问题的建议都会受到赞赏.
谢谢