链接调试版本以释放libary:警告LNK4204

时间:2013-03-22 18:19:09

标签: visual-studio debug-symbols linker-warning

我已经在这个问题上搜索了我的裤子,虽然我发现了很多类似的Q& As,但似乎没有一个能解决我遇到的具体问题。

我使用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

精细。我理解这是在说什么。我最初的反应是"好吧,关闭这个"将是微不足道的。但是,我无法阻止这种情况发生。令我惊讶的事情是:

  1. 我无法在库项目设置中找到任何选项,无需调试信息即可进行编译(即使在发布中!) - 上帝,我可以发誓有办法!
  2. 我无法在用户应用程序项目设置中找到任何选项,以指示链接器我知道那里没有调试信息,它应该继续并执行它所告知的内容! / LI>

    这有什么好的解决方案吗?据推测,想要链接到没有调试信息的库但是为我创建的二进制文件生成调试信息并不罕见?如何链接到内核库和crts,肯定会发生什么?我不能相信我之前从未发现过这个问题,这似乎是显而易见的(你能说我生气了!)。

    仅供参考,在人们说之前,我真的不想发布带有调试信息的发布库,因为我希望尽量减少逆向工程的风险。我知道有些人会说当用户收到错误并且你没有pdb信息时你会后悔,但是当我说我不关心它时,请相信我。

    所有帮助表示感谢(如果这是重复的话,请提供帮助,但我真的无法找到相同的问题)。

    干杯, 安德鲁

    更新

    我相信我已经解决了这个问题,但我并不完全确定它的工作原理。绝对需要更多地研究一下。但简而言之,我可以(并且实际上需要)使用VC9构建。请注意,VC9实际上为您提供了额外的选项"已禁用" for" Debug Information Format",它不会出现在VC10中;这可能解释了我的一些困惑。

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

1 个答案:

答案 0 :(得分:0)

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