问题描述
假设我的代码具有一个内部函数,该函数不会导出,不能以任何其他方式公开(例如,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 (将#修改为@)