Visual studio 将调试生成链接到发布库:警告LNK4204

Visual studio 将调试生成链接到发布库:警告LNK4204,visual-studio,debug-symbols,linker-warning,Visual Studio,Debug Symbols,Linker Warning,我使用的是VC10(但我想这适用于VC9、VC10和VC11)。简而言之,我想编译一个发布库,发布它,并允许用户在调试或发布应用程序时链接到该库。令人恼火的是,我一直收到LNK4204错误,例如: mylib.lib(an_object_in_my_lib.obj) : warning LNK4204: '[PATH TO USER APPLICATION INTERMEDIATE DIRECTORY]\vc100.pdb' is missing debugging information fo

我使用的是VC10(但我想这适用于VC9、VC10和VC11)。简而言之,我想编译一个发布库,发布它,并允许用户在调试或发布应用程序时链接到该库。令人恼火的是,我一直收到LNK4204错误,例如:

mylib.lib(an_object_in_my_lib.obj) : warning LNK4204: '[PATH TO USER APPLICATION INTERMEDIATE DIRECTORY]\vc100.pdb' is missing debugging information for referencing module; linking object as if no debug info
好的。我明白这是什么意思。我最初的反应是“好吧,把它关掉将是微不足道的”。然而,我找不到办法来阻止这一点。令我惊讶的是:

  • 在库项目设置中,我找不到任何选项可以在没有调试信息的情况下进行编译(即使是在发行版中!)——我发誓有一种方法
  • 我在用户应用程序项目设置中找不到任何选项来指示链接器,我知道没有调试信息,它应该继续并按照指示执行 有什么好的解决办法吗?想必,想要链接到没有调试信息的库,但为我正在创建的二进制文件生成调试信息并不少见?链接到内核库和CRT会怎么样,当然这就是实际情况?我不敢相信我以前从未发现过这个问题,这似乎是显而易见的(你能告诉我我很生气!)

    仅供参考,在人们说之前,我真的不想在发布libs时附带调试信息,因为我想最大限度地降低逆向工程的风险。我知道有些人会说,当一个用户出现错误而你没有pdb信息时,你会后悔的,但是相信我,我说我不在乎

    更新:

    我相信我已经解决了这个问题,但我不完全确定它为什么有效。肯定需要进一步调查。但简而言之,我可以(事实上需要)使用VC9构建。注意,VC9实际上为“调试信息格式”提供了一个额外的“禁用”选项,这在VC10中没有出现;这也许可以解释我的一些困惑


    现在的“解决方案”似乎是创建一个库的调试版本(我没问题),但保持调试信息“禁用”。当我这样做的时候,我没有抱怨。这很奇怪,因为在这两种情况下都没有调试信息(将调试链接到发行版和调试链接到调试),但是当链接到调试库时,我没有收到任何警告。到目前为止,这有点神秘。如果我有时间,我会进一步调查。也许我错过了什么

    防止警告的唯一方法是提供符号信息。如果你很聪明,你可以提供足够的符号信息来满足链接器的要求,但不足以提高你想象中的风险,使代码更容易进行反向工程。

    你应该能够禁用调试信息。恐怕这对我不起作用。我试图在创建库时关闭它,因此我没有“生成调试信息”选项。我不想在用户应用程序上关闭该选项。此外,删除时,调试信息格式将恢复为默认格式。