如何解决为什么编译器/链接器会为我的函数生成“ _16386”或“ C3304_3”之类的“神秘”名称?
假设我的代码具有一个内部函数,该函数不会导出,不能以任何其他方式公开(例如,CreateThread
的线程函数)。如果我使用C ++ Builder(使用10.4 Sydney和经典编译器)编译应用程序,则可以检查(通过.map
文件)我的函数将丢失其名称,并将其命名为_16386
。它始终以_
开头,后跟一些整数。另一个示例是诸如C3304_3
,D304_0
,B09
之类的名称。
这不是我的特定功能。内部(未发布)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 举报,一经查实,本站将立刻删除。