为什么编译器/链接器会为我的函数生成“ _16386”或“ C3304_3”之类的“神秘”名称?

问题描述

假设我的代码具有一个内部函数,该函数不会导出,不能以任何其他方式公开(例如,CreateThread的线程函数)。如果我使用C ++ Builder(使用10.4 Sydney和经典编译器)编译应用程序,则可以检查(通过.map文件)我的函数将丢失其名称,并将其命名为_16386。它始终以_开头,后跟一些整数。另一个示例是诸如C3304_3D304_0B09之类的名称。

这不是我的特定功能。内部(未发布)RTL函数也是如此。

这是的错误。重整是一种用类型信息修饰名称的方法。例如:@Winapi@Commctrl@initialization$qqrv。这是完全不同的事情。此外,“映射名称不正确的地图”选项设置为False。如果我将其设置为True,则_16386的错误版本将类似于@Winapi@Commctrl@_16386

对于典型的应用程序运行当然不是问题,因为没有通过函数名称引用该函数。但是,如果我要使用类似异常跟踪工具之类的工具(或什至是MS Process Explorer,假设我将C ++ Builder符号转换为MS DBG格式),则该工具将使用生成的符号/调试信息,并向我显示{{ 1}}名称。而且我不知道这个名字指的是什么代码!

为什么编译器/链接器会这样做?有什么方法可以阻止它吗?

P.S。所有测试均使用默认的_16386配置文件运行,这意味着启用了“禁用所有优化”和“全部调试信息”选项。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...