从二进制dll文件中删除C类名称
我在Visual Studio 2010下有一个C项目,它编译成一个dll.我在项目中定义了几个私有的特定于实现的类,例如CMyClass.此类不是从dll或任何接口函数导出的.但是,当我检查生成的dll文件时,其中存储了一个字符串“CMyClass”.它是一个发布版本,我不希望这个字符串出现在dll文件中.这个DLL被发送给客户,我希望我在项目中使用的所有名称都从dll文件中删除,所以没有人能够得到我们在dll中使用的算法这么简单的线索.
我使用Release配置.在项目属性中,链接器选项卡下的“生成调试信息”选项处于关闭状态,“C/C++”选项卡下的“调试信息格式”设置为“程序数据库(/ Zi)”.我试图为“调试信息格式”设置空字符串,但没有成功. 在dll中找到的字符串看起来像.?AVCMyClass @@并且位于dll文件的最后.它是dll文件中唯一出现的“CMyClass”字符串.但是,几乎所有内部??类都会显示此字符串. 如何摆脱这些提及? 更新 请注意,我不想混淆源代码本身.提供的链接无关紧要.我没有看到为什么类名存储在dll文件中的原因.我总是可以在构建之前重命名我的类,但这不是一个非常直接的解决方案. UPDATE2 我不同意社区关闭这个问题,因为这不是重复.答案在Tyler Gill的评论中给出.感谢他和其他人的耻辱.
正如我对评论的猜测似乎是正确的,我将此作为答案重新发布.
类名的字符串是为已编译的二进制文件启用RTTI(运行时类型信息)的结果.启用RTTI时,编译器会创建对象,这些对象存储有关编译到二进制文件中的类型的信息,其中一个属性是类型的名称. 请注意,dynamic_cast和typeid的某些用法需要RTTI,因此禁用将使您失去C的这些功能. 要在Visual Studio中禁用RTTI,请使用/ GR-开关(请参阅http://msdn.microsoft.com/en-us/library/we6hfdy0(v=vs.100).aspx,正如Mikhail发布的那样.) 要在GCC中禁用它,请使用-fno-rtti开关. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- “允许计算机关闭此设备以节省电量” – Windows vNIC
- 系统管理员为Windows专家/ Lunix Noob提供Debian / Ubuntu教
- 如何在wix中进行重大升级时停止并且不卸载Windows服务?
- 有没有找到Windows DLL的MD5或其他校验和的地方?
- windows-8 – Windows 8 Live Tiles每分钟更新一次
- 如何在Windows中设置和使用Jpegtran
- windows – 如何找出真正的屏幕刷新率(不是舍入的数字)
- Microsoft Azure IoT Hub是否存储数据?
- 在Windows上以编程方式中断MATLAB
- windows – 保护已安装的Bitlocker驱动器免受其他用户的攻击
- [DOS] XCOPY 参数说明
- [Windows内核分析]KPCR结构体介绍 (CPU控制区 Pr
- microsoft-cognitive – 无法找到Microsoft认知服
- windows – 对齐文本框
- Windows Azure存储版本升级到> 4会导致“远程服务
- windows-10 – IIS报告在WLS Bash中创建的文件夹
- windows-server-2008 – 尝试备份时VSS错误521
- Windows Server 2016-管理站点复制(一)
- windows-server-2003 – Windows IIS身份验证不能
- .net-3.5 – TargetInvocationException:Micros