我已经在这一款上搜索了我的裤子,同时我发现了很多类似的问题,因为似乎没有解决我遇到的具体问题。将调试版本链接到版本库:警告LNK4204
我使用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
好。我明白这是说什么。我最初的反应是“好吧,关掉这件事很简单”。但是我无法找到防止这种情况的方法。已经让我感到惊讶的事情是:
- 我找不到在库项目中的任何选项设置没有调试信息编译 - 和上帝,我可以发誓,有一种方法(甚至在发布!)!
- 我无法在用户应用程序项目设置中找到任何选项来指示链接器,我知道这里没有调试信息,它应该继续,并按照它的要求做!
有没有什么好的解决方案呢?据推测,想要链接到一个没有调试信息的库,但为我创建的二进制文件生成调试信息并不罕见?链接到内核库和crts,那肯定会发生什么?我无法相信我以前从未发现过这个问题,这似乎很明显(你能否告诉我很恼火!)。在人们说出来之前,我真的不想发布带有调试信息的版本库,因为我想尽量减少逆向工程的风险。我知道有些人会说,当用户发现bug并且没有pdb信息时,你会后悔的,但是当我说我不关心这个时,请相信我。
所有帮助赞赏(和apols如果这是一个重复,但我真的无法找到一个相同的问题)。
干杯, 安德鲁
UPDATE:
我相信我已经解决问题了,但我不完全知道为什么它的工作原理。绝对需要进一步研究这一点。但总之,我可以(并且实际上需要)用VC9构建。请注意,VC9实际上为“调试信息格式”提供了一个额外的“禁用”选项,该选项不会出现在VC10中;这可能解释我的一些混乱。
现在“解决方案”似乎是创建库的调试版本(我很好),但保持调试信息“禁用”。当我这样做时,我没有任何投诉。这很奇怪,因为在这两种情况下都没有调试信息(这些情况是将调试连接到发布以及调试到调试),但是当链接到调试库时,我不会收到警告。目前为止,如果我有时间,我会进一步调查。也许我错过了一些东西!
你应该能够禁用调试信息[像这样](http://stackoverflow.com/questions/14505322/disable-c-pdb-generation-from-the-ide)。 – 2013-03-22 21:16:32
这恐怕不适合我。我在创建库时试图关闭它,所以我没有“生成调试信息”选项。我不想在用户应用程序中关闭该选项。此外,调试信息格式在删除时会恢复为默认值。 – 2013-04-06 12:17:57