Why does g ++ generate some (weak) similar characters?

I am looking at the output of nm -C

0804a86a W ForkMessageHandler::ForkMessageHandler()
0804a86a W ForkMessageHandler::ForkMessageHandler()
0804a6fa T ForkMessageHandler::~ForkMessageHandler()
0804a698 T ForkMessageHandler::~ForkMessageHandler()
0804a698 T ForkMessageHandler::~ForkMessageHandler()
0804a800 W MultiMessageHandler::MultiMessageHandler()
0804a800 W MultiMessageHandler::MultiMessageHandler()
0804a84c W MultiMessageHandler::~MultiMessageHandler()
0804a81c W MultiMessageHandler::~MultiMessageHandler()
0804a81c W MultiMessageHandler::~MultiMessageHandler()

Why does g ++ generate many identical characters and what is the purpose of weak characters?

Edit: this is from the final executable, not the .o file. The ForkMessageHandler is specified in the .cpp file, there is no header for it, but several include headers for the base class.

+3
source share
2 answers

These are default constructors and automatically created destructors. They will be generated as weak characters in each compilation unit, which includes a class definition, to ensure that at least one is available.

, , , , , .

+3

, GCC inline, , , , .

0

Source: https://habr.com/ru/post/1731628/


All Articles