2013-04-09 65 views
1

我有一个很奇怪的问题。我在VS2012中有一个与其他库静态链接的项目。 如果我建立项目一切都很好。 但是,如果我重建项目,它将失败并出现链接问题。 这个lib是编译的,我不在编译期间编译它。 如果我清除所有内容或在先前的构建之上构建/重建,这并没有什么不同。 建造作品,重建 - 不是!在Visual Studio 2012中重建时出现奇怪的链接错误

任何人都可以给我至少一条线索 - 这两条命令有什么不同?我甚至不知道如何开始调查问题。

补充:

要全部回答的人 - 你是试图解释我的构建和重建之间的差异。谢谢,但我知道。你忽略了我之前解释过的事实:

我可以完全清除以前的结果,删除OutDir,删除IntDir,删除编译产生的所有东西。仍然 - 建立工作,不重建。

在上面解释的案例中 - 如果您第一次构建,构建和重建有什么区别?

我没有发布错误的原因是那些只是链接错误告诉我.lib丢失。虽然它显然不是。

这里是例子:

1> C:\ Program Files文件(x86)的\微软的Visual Studio 11.0 \ VC \ \包括sal.h(2872):警告RC4005: '_ useHeader' :重新定义 1>
1> C:\ Program Files文件(x86)的\微软的Visual Studio 11.0 \ VC \ \包括sal.h(2882):警告RC4005: '
_on_failure':重新定义 1>
1>创建库D:\ p4client \ ProAudio \ dev_main \ ProAudio \ XPlatform .. \ VisualStudioBuildProducts \ WaveShell-DAE \ Win32 \ Debug \ Products \ WaveShell-DAE.lib和对象D:\ p4client \ Pro Audio \ dev_main \ ProAudio \ XPlatform .. \ VisualStudioBuildProducts \ WaveShell-DAE \ Win32 \ Debug \ Products \ WaveShell-DAE.exp 1> DefaultSwap.obj:error LNK2019:无法解析的外部符号_ASI_UnregisterCustomByteSwapper @ 4在函数中引用_RemoveByteSwapper 1> DefaultSwap.obj:错误LNK2019:解析外部符号_ASI_RegisterCustomByteSwapper @ 8在功能_RegisterByteSwapper引用 1> PlugInLib.lib(PlugInUtils.obj):错误LNK 2001:解析外部符号_ 小鬼 _FicGestalt @ 8 1> PlugInLib.lib(CDSPProcess .OBJ):错误LNK 2001:解析外部符号_ 小鬼 _FicGestalt @ 8 1> PlugInLib.lib(CAdaptorPlugIn.obj):错误LNK 2001:解析外部符号_ imp的 _FicGestalt @ 8 1> CShellProcessGroup.obj:错误LNK2019:解析外部符号_ 小鬼 _FicGestalt @ 8函数引用 “公共:__thiscall CShellProcessGroup :: CShellProcessGroup(无效)”(?? 0CShellProcessGroup @@ @ QAE XZ) 1> CEffectTypeRTAS.obj:错误LNK2001:解析外部符号_ 小鬼 _FicGestalt @ 8 1> PlugInLib.lib(CProcessGroupInterface.obj):错误LNK 2001:解析外部符号_ 小鬼 _FicGestalt @ 8 1> PlugInLib。LIB(CProcessGroup.obj):错误LNK2001:解析外部符号_ 小鬼 _FicGestalt @ 8

也许这将有助于知道,在运行建立(不重建)我会得到以下警告:

1> C:\ Program Files文件(x86)的\微软的Visual Studio 11.0 \ VC \ \包括sal.h(2872):警告RC4005: '_ useHeader':重新定义 1>
1> C:\ Program Files文件(x86)的\微软的Visual Studio 11.0 \ VC \包括\ sal.h(2882):警告RC4005: '
_on_failure':重新定义 1>
1>创建库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:PDB 'vc110_ib_2.pdb' 不是用“PlugInLib找到。 lib(C321ChipDSP.obj)'或'D:\ p4client \ ProAudio \ dev_main \ ProAudio \ VisualStudioBuildProducts \ WaveShell-DAE \ Win32 \ Debug \ vc110_ib_2.pdb';警告LNK4099:PDB 'vc110_ib_3.pdb' 没有与 'PlugInLib.lib(CDSP.obj)' 或“d发现:就好像没有调试信息 1> PlugInLib.lib(CDSP.obj)链接对象\ p4client \专业音响\ dev_main \专业音响\ VisualStudioBuildProducts \ WaveShell-DAE \的Win32 \调试\ vc110_ib_3.pdb';警告LNK4099:PDB 'vc110_ib_4.pdb' 没有与 'PlugInLib.lib(CDSPUtils.obj)' 或“d发现:就好像没有调试信息 1> PlugInLib.lib(CDSPUtils.obj)链接对象\ p4client \专业音响\ dev_main \专业音响\ VisualStudioBuildProducts \ WaveShell-DAE \的Win32 \调试\ vc110_ib_4.pdb';如同没有调试信息一样链接对象

谢谢!

+0

你可以退出你的问题,包括错误重建报告吗? – simonc 2013-04-09 14:32:37

+0

什么是错误? – 2013-04-09 14:35:57

+0

针对您的特定问题,请发布您遇到的错误。就目前而言,你的问题似乎是“Build和Rebuild有什么区别?”这可以回答[这里](http://stackoverflow.com/questions/3095901/difference-between-build-solution-rebuild-solution-and-clean-solution-in-visua) – quandrei 2013-04-09 14:45:06

回答

1

构建手段编译和链接只有自上次编译后更改过的源文件,而重建指编制,也不管他们是否更改或不连接所有的源文件。

构建是正常的事情,速度更快。有时,项目目标组件的版本可能会不同步,重建对于构建成功是必要的。在实践中,你永远不需要清洁。

0

“建设”将做增量构建,通过在解决方案中每个项目基本上会,看看是否出现了自上一次创建的变化,如果有,又建立它。

'重建'将执行一切干净,从头开始构建一切。

编辑:更详细的答案link

0

如果你的静态库在同一个解决方案,作为链接到lib项目中的另一个项目,那么你就需要设置两个项目之间的依赖关系,构建进程将首先构建lib,然后再构建其他项目。

要做到这一点,在解决方案ABD右键单击然后从弹出菜单中选择“项目依赖”。