我尝试使用反编译器“破解”我自己的应用程序。 我可以清楚地看到函数名称和许多参数名称。
因此,我认为我以某种方式使用我的代码编译调试信息,尽管它已设置为Release。
此外,编译器会告诉我类似
的内容mylib.lib(vq.obj):警告LNK4099:在“mylib.lib(vq.obj)”或“M:\ myapp \ Release \ vc100.pdb”中找不到PDB“vc100.pdb”;对象将被链接,就好像没有可用的调试信息一样。
这是否提示VC尝试包含一些调试信息?
此外,我的解决方案包含3个项目,以编译形式生成3个dll。
当我“破解”3个dll中的一个时,我可以看到其中2个dll的功能名称。 我不知道为什么。
有人可以告诉我如何使dll更少调试,以及如何“使用”dll中的dll函数而不是1 dll中的所有函数。我希望我能解释清楚。
答案 0 :(得分:5)
这是否提示VC尝试包含一些调试信息?
是的,它实际上意味着您将dll与调试信息相关联。您可以通过设置链接器 - >来禁用它。调试 - >生成调试信息为否。但是,请注意,此选项不会(大致)影响您的dll文件,但会切换pdb文件的生成。
有两种类型的实体,这些名称将显式存储在dll文件中:
你无法摆脱第一个。任何使用dll的人都必须知道如何命名接口函数。
但是,您可以禁用第二个。只有在启用RTTI时才需要多态类名称。这就是你正在做的dynamic_cast
和typeid
。如果您不需要这些功能,可以通过转到C / C ++来禁用RTTI - >语言 - >启用运行时类型信息并将其设置为否。请参阅Remove C++ class names from binary dll file。
所有其他实体的名称将被编译器剥离。