【问题标题】:VS2010 final does only link project on "rebuild all", not on "build changed"VS2010 final 仅将项目链接到“全部重建”,而不是“构建已更改”
【发布时间】:2011-05-28 20:47:40
【问题描述】:

我刚刚将一个包含 c++ 和 c# 项目的解决方案从 VS2008 迁移到 VS2010 并遇到了一个奇怪的问题。

当我选择“全部重建”时,一切都会按照我的预期进行编译和链接。

然后我更改了一些 c++ 源文件(只需添加一个空格),构建项目,我得到了几个 数千个链接错误,如下所示:

GDlgPackerListe.obj : error LNK2028: Nicht aufgelöstes Token (0A0000C7) ""public: bool __thiscall LList::Add(class LBString const &)" (?Add@LList@@$$FQAE_NABVLBString@@@Z)", auf das in Funktion ""public: virtual void __thiscall LRcPackerListe::HookRunReport(class LFortschritt &)" (?HookRunReport@LRcPackerListe@@$$FUAEXAAVLFortschritt@@@Z)" verwiesen wird.
Db_Lieferschein2.obj : error LNK2020: Nicht aufgelöstes Token (0A0000E6) "public: bool __thiscall LList::Add(class LBString const &)" (?Add@LList@@$$FQAE_NABVLBString@@@Z).
bmed.obj : error LNK2028: Nicht aufgelöstes Token (0A00014D) ""public: bool __thiscall LList::Add(class LBString const &)" (?Add@LList@@$$FQAE_NABVLBString@@@Z)", auf das in Funktion ""public: virtual long __thiscall MENUKB::Methode(long,long)" (?Methode@MENUKB@@$$FUAEJJJ@Z)" verwiesen wird.
GDlgPackerListe.obj : error LNK2028: Nicht aufgelöstes Token (0A0000C9) ""public: void __thiscall LList::Sort(void)" (?Sort@LList@@$$FQAEXXZ)", auf das in Funktion ""public: virtual void __thiscall LRcPackerListe::HookRunReport(class LFortschritt &)" (?HookRunReport@LRcPackerListe@@$$FUAEXAAVLFortschritt@@@Z)" verwiesen wird.
Dlg_Gutschrift.obj : error LNK2020: Nicht aufgelöstes Token (0A000128) "public: virtual __thiscall LBaseType::~LBaseType(void)" (??1LBaseType@@$$FUAE@XZ).
Module_Damals.lib(svSuchAltLink.obj) : error LNK2001: Nicht aufgelöstes externes Symbol ""public: __thiscall SView::SView(void)" (??0SView@@QAE@XZ)".
Module_Damals.lib(svShowEMF.obj) : error LNK2001: Nicht aufgelöstes externes Symbol ""public: virtual void __thiscall SView::HookValueChanged(unsigned __int64)" (?HookValueChanged@SView@@UAEX_K@Z)".

当我点击“全部重建”时,它会重新编译和链接,没有任何错误甚至警告,并生成一个工作 exe。

我使用的是 Visual Studio 2010 final(德语版)。

这是怎么回事?或者,更重要的是:如何让链接器正常工作??

【问题讨论】:

  • 尝试一次删除所有中间文件 - 从仅包含源文件和项目文件的项目文件夹开始。
  • 去过,试过了,刚刚又试了。同样的问题:第一次完全重建确实有效,然后由于大量链接错误而失败。是的,我真的删除了除源文件之外的所有文件。即使是隐藏的。

标签: visual-studio-2010 linker


【解决方案1】:

好吧,经过一番摸索,我们似乎找到了答案。至少在我们的案例中,问题有两个方面:

  1. 我们已经设置了项目依赖项,但没有使用较新的“项目到项目”引用作为将项目链接到目标的方法。似乎旧的依赖项对话框不再适合了。

  2. 我们有一些可疑的代码潜入了定义虚函数但未在派生类中实现的地方——基类有一个默认实现。为什么这不是我不知道的重建错误。

以下内容比我解释得更好:) http://blogs.msdn.com/b/vcblog/archive/2010/03/02/visual-studio-2010-c-project-upgrade-guide.aspx

【讨论】:

  • @Mr.Wizard:所有这些都在 cmets 中。我只能假设这确实是 OP 所接受的,因为最初的答案是一个问题。
  • @Mr.Wizard,是的,那太好了。我只是仔细研究了一下,因为它被接受了。否则我也会错过的。
  • @Mr.Wizard:如果您可以自己编辑,那将是最好的。如果您不确定该怎么做,可以将其标记为“其他”。如果只是需要删除的内容(例如您今天早上标记的大约 98% 的案例),您可以将其标记为“不是答案”。
  • @Bill,好的,我会尽力遵循。我将删除我上面的​​所有 cmets(如果我记得的话,稍后会删除这个)以减少混乱。
【解决方案2】:

我也有这个错误。我的主项目依赖于一个库,而这个库依赖于另一个库等。从 VS2008 迁移到 VS2010 后,必须添加每个库作为对主项目的引用。现在错误消失了……

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 2014-03-07
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 1970-01-01
    相关资源
    最近更新 更多