我有一个非常奇怪的问题。我在VS2012中有一个项目,它与另一个lib静态链接。 如果我建立项目一切都很好。 但是,如果我重新启动项目,它将失败并出现链接问题。 lib是编译的,我在构建期间不编译它。 如果我在之前的构建之上清理所有内容或构建/重建,则没有区别。 构建作品,重建 - 不是!
任何人都可以给我至少一个线索 - 这两个命令有什么不同?我甚至不知道如何开始调查这个问题。
补充:
对所有回答的人 - 你试图向我解释构建和重建之间的区别。谢谢,但我知道。你忽略了我之前解释过的事实:
我可以完全清除以前的结果,删除OutDir,删除IntDir,删除编译产生的所有内容。仍然 - 建立工作,不重建。
在上面解释的情况下 - 如果你第一次构建,那么构建和重建之间有什么区别??
我没有发布错误的原因是那些只是链接错误告诉我.lib丢失了。虽然显然不是。
以下是示例:
1> C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ include \ sal.h(2872):警告RC4005:'_ useHeader':重新定义
1 GT;
1> C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ include \ sal.h(2882):警告RC4005:' _on_failure':重新定义
1 GT;
1 GT;创建库D:\ p4client \ ProAudio \ dev_main \ ProAudio \ XPlatform .. \ VisualStudioBuildProducts \ WaveShell-DAE \ Win32 \ Debug \ Products \ WaveShell-DAE.lib和对象D:\ p4client \ ProAudio \ dev_main \ ProAudio \ XPlatform .. \ VisualStudioBuildProducts \ WaveShell-DAE \ WIN32 \调试\产品\ WaveShell,DAE.exp
1> DefaultSwap.obj:错误LNK2019:函数_RemoveByteSwapper中引用的未解析的外部符号_ASI_UnregisterCustomByteSwapper @ 4
1> DefaultSwap.obj:错误LNK2019:函数_RegisterByteSwapper中引用的未解析的外部符号_ASI_RegisterCustomByteSwapper @ 8
1> PlugInLib.lib(PlugInUtils.obj):错误LNK2001:未解析的外部符号_ imp _FicGestalt @ 8
1> PlugInLib.lib(CDSPProcess.obj):错误LNK2001:未解析的外部符号_ imp _FicGestalt @ 8
1> PlugInLib.lib(CAdaptorPlugIn.obj):错误LNK2001:未解析的外部符号_ imp _FicGestalt @ 8
1> CShellProcessGroup.obj:错误LNK2019:未解析的外部符号_ imp _FicGestalt @ 8在函数“public:__thiscall CShellProcessGroup :: CShellProcessGroup(void)”中引用(?? 0CShellProcessGroup @@ QAE @ XZ)
1> CEffectTypeRTAS.obj:错误LNK2001:未解析的外部符号_ imp _FicGestalt @ 8
1> PlugInLib.lib(CProcessGroupInterface.obj):错误LNK2001:未解析的外部符号_ imp _FicGestalt @ 8
1> PlugInLib.lib(CProcessGroup.obj):错误LNK2001:未解析的外部符号_ imp _FicGestalt @ 8
也许知道运行构建(不重建)会有所帮助,我会收到以下警告:
1> C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ include \ sal.h(2872):警告RC4005:'_ useHeader':重新定义
1 GT;
1> C:\ Program Files(x86)\ Microsoft Visual Studio 11.0 \ VC \ include \ sal.h(2882):警告RC4005:' _on_failure':重新定义
1 GT;
1 GT;创建库D:\ p4client \ ProAudio \ dev_main \ ProAudio \ XPlatform .. \ VisualStudioBuildProducts \ WaveShell-DAE \ Win32 \ Debug \ Products \ WaveShell-DAE.lib和对象D:\ p4client \ ProAudio \ dev_main \ ProAudio \ XPlatform .. \ VisualStudioBuildProducts \ WaveShell-DAE \ WIN32 \调试\产品\ WaveShell,DAE.exp
1> PlugInLib.lib(C321ChipDSP.obj):警告LNK4099:在'PlugInLib.lib(C321ChipDSP.obj)'或'D:\ p4client \ ProAudio \ dev_main \ ProAudio \ VisualStudioBuildProducts \中找不到PDB'vc110_ib_2.pdb' WaveShell-DAE \ WIN32 \调试\ vc110_ib_2.pdb';链接对象就像没有调试信息一样
1> PlugInLib.lib(CDSP.obj):警告LNK4099:在'PlugInLib.lib(CDSP.obj)'或'D:\ p4client \ ProAudio \ dev_main \ ProAudio \ VisualStudioBuildProducts \中未找到PDB'vc110_ib_3.pdb' WaveShell-DAE \ WIN32 \调试\ vc110_ib_3.pdb';链接对象就像没有调试信息一样
1> PlugInLib.lib(CDSPUtils.obj):警告LNK4099:找不到“PlugInLib.lib(CDSPUtils.obj)”或“D:\ p4client \ ProAudio \ dev_main \ ProAudio \ VisualStudioBuildProducts”的PDB“vc110_ib_4.pdb” WaveShell-DAE \ WIN32 \调试\ vc110_ib_4.pdb';链接对象就像没有调试信息一样
谢谢!
答案 0 :(得分:1)
构建意味着仅编译和链接自上次构建以来已更改的源文件,而重建意味着编译和链接所有源文件,无论它们是否已更改。
构建是正常的事情并且更快。有时,项目目标组件的版本可能会失去同步,并且必须进行重建才能使构建成功。在实践中,您永远不需要清洁。
答案 1 :(得分:0)
'Build'将进行增量构建,基本上会遍历解决方案中的每个项目,看看自上次构建以来是否有变化,如果存在,则再次构建它。
'Rebuild'将对所有内容进行清理并从头开始构建所有内容。
修改:更详细的回答link
答案 2 :(得分:0)
如果静态库是与链接到lib的项目在同一解决方案中的另一个项目,那么您需要在两个项目之间设置依赖关系,以便构建过程首先构建lib,然后构建另一个项目。
为此,右键单击Solution abd从弹出菜单中选择“Project dependencies”。
答案 3 :(得分:0)
我不确定它是否相关。但是你可能想检查一下这个帖子(虽然这个症状与你的相反......):
VS2010 Unresolved External Symbol errors on build (but not rebuild)