gpt4 book ai didi

c++ - 从二进制 dll 文件中删除 C++ 类名

转载 作者:可可西里 更新时间:2023-11-01 18:36:02 26 4
gpt4 key购买 nike

我在 Visual Studio 2010 下有一个 C++ 项目,它编译成一个 dll。我的项目中定义了几个私有(private)的特定于实现的类,例如CMyClass。此类不从 dll 或任何接口(interface)函数导出。但是,当我检查生成的 dll 文件时,其中存储了一个字符串“CMyClass”。这是一个发布版本,我不希望这个字符串出现在 dll 文件中。这个 dll 已交付给客户,我希望我在项目中使用的所有名称都从 dll 文件中删除,这样就没有人能够获得我们在 dll 中使用的算法的简单线索。

我使用发布配置。在项目属性中,链接器选项卡下的“生成调试信息”选项已关闭,C/C++ 选项卡下的“调试信息格式”设置为“程序数据库(/Zi)”。我试图为“调试信息格式”设置空字符串,但没有成功。

在 dll 中找到的字符串看起来像 .?AVCMyClass@@ 并且位于 dll 文件的最后。这是 dll 文件中唯一出现的“CMyClass”字符串。但是,这个字符串几乎适用于我所有的内部类。

如何摆脱这些提及?

更新

请注意,我不想混淆源代码本身。提供的链接无关紧要。我只是看不出类名存储在 dll 文件中的原因。我总是可以在构建之前重命名我的类,但这不是很直接的解决方案。

更新2

我不同意社区关闭此问题,因为这不是重复问题。 Tyler Gill在评论中给出了答案.感谢他,愧对他人。

最佳答案

由于我从评论中的猜测似乎是正确的,所以我将其重新发布为答案。

类名的字符串是为编译的二进制文件启用 RTTI(运行时类型信息)的结果。启用 RTTI 后,编译器会创建对象来存储有关编译到二进制文件中的类型的信息,其中一个属性是类型的名称。

请注意,dynamic_casttypeid 的某些使用需要 RTTI,因此禁用将失去 C++ 的这些功能。

为了在 Visual Studio 中禁用 RTTI,请使用 /GR- 开关(参见 http://msdn.microsoft.com/en-us/library/we6hfdy0(v=vs.100).aspx,如 Mikhail 所发。)

要在 GCC 中禁用它,请使用 -fno-rtti 开关。

关于c++ - 从二进制 dll 文件中删除 C++ 类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14869639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com