我正在阅读一本 c++ 书籍,其中指出链接器通常传递的是混乱的名称,而不是原始名称。所以,我想看看错位的名字会是什么样子。因此,我创建了一个名为 Test 的类,它只包含函数签名并将其保存到一个名为 name_mangling.cpp 的文件中
然后在 main 方法中,我调用这些函数。我首先将文件编译为 .o,然后尝试将其与命令链接,例如
g++ -o name_mangling name_mangling.o
我希望看到损坏的名称,但 g++ 打印了实际名称,例如
undefined reference to `Test::Test(char const*)'
但另一方面,当我尝试链接到诸如 .so 之类的共享对象时,我看到了损坏的名称。为什么 g++ 在 .so 而不是上述情况下打印损坏的名称?