小编emi*_*rax的帖子

如何调试STL/C++的GCC/LD链接过程

我正在研究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链接).我知道如果在文本段中找到符号,则使用整个段,但仍然太多了.

任何关于如何解决这个问题的建议都会受到赞赏.

谢谢

c++ embedded linker gcc stl

10
推荐指数
1
解决办法
8614
查看次数

C++ 11元编程 - 在编译期间查找枚举值(值包含间隙)

在编译时,是否有办法验证给定值是否在给定枚举的值内,因此有效?

enum myenum { val1 = 10, val2 = 30, val3 = 45 }

template <myenum t>
class myClass
{ ... }

myClass<10> a; // fails, OK
myClass<val1> b; // compiles OK
myClass<myenum(24)> c; //compiles, NOT OK!
Run Code Online (Sandbox Code Playgroud)

使用第二个模板非类型布尔参数在那里是有用的,并且该布尔值将由元函数给出,给定值将验证该值是否在myenum的值内.

我查看了各种枚举相关的问题,比如如何迭代枚举,似乎无法完成.

c++ enums metaprogramming c++11

6
推荐指数
2
解决办法
1540
查看次数

在编译时动态生成结构

我必须生成一个仅在某些条件下包含某些字段的数据结构.这通常总是转化为以下内容

struct MyStruct {
    int     alwaysHere;

#ifdef WHATEVER
    bool    mightBeHere;
#endif

    char    somethingElse;

#if SOME_CONSTANT > SOME_VALUE
    uint8_t alywasHereButDifferentSize;
#else
    uint16_t alywasHereButDifferentSize;
#endif
...
};
Run Code Online (Sandbox Code Playgroud)

从我的观点来看,这看起来很难看,而且难以理解.甚至没有谈论处理这些字段的代码,通常也在ifdef下.

我正在寻找一种优雅的方法来实现相同的结果,而不会增加任何开销,但代码更具可读性.模板专业化似乎有点过分,但在我看来它是唯一的选择.

C++ 11是否会添加任何内容来处理这种情况?

任何建议将不胜感激.

c++ templates structure template-meta-programming c++11

2
推荐指数
1
解决办法
481
查看次数