1

我有一个非常奇怪的问题。我在 VS2012 中有一个与另一个库静态链接的项目。如果我建立项目一切都很好。但是,如果我重建项目,它将因链接问题而失败。lib已编译,我在构建期间不编译它。 如果我清理所有内容或在先前构建的基础上进行构建/重建,这没有区别。建造工程,重建 - 不是!

谁能给我至少一个线索-这两个命令有什么不同?我什至不知道如何开始调查这个问题。

补充:

对于所有回答的人-您试图向我解释构建和重建之间的区别。谢谢,但我知道。你忽略了我之前解释的事实:

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

在上述情况下 - 如果您第一次构建,构建和重建之间有什么区别?

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

这是示例:

1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\sal.h(2872): 警告 RC4005: '_ useHeader' : 重新定义 1>
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\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\Debug\Products\WaveShell-DAE.exp 1>DefaultSwap.obj:错误 LNK2019:未解析的外部符号 _ASI_UnregisterCustomByteSwapper@4 在函数 _RemoveByteSwapper 1>DefaultSwap.obj 中引用:错误 LNK2019:未解析的外部函数 _RegisterByteSwapper 1>PlugInLib.lib(PlugInUtils.obj) 中引用的符号 _ASI_RegisterCustomByteSwapper@8:错误 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>
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\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\Debug\Products\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';链接对象好像没有调试信息 1>PlugInLib.lib(CDSP.obj):警告 LNK4099:在“PlugInLib.lib(CDSP.obj)”或“D:\p4client\ProAudio”中找不到 PDB 'vc110_ib_3.pdb' \dev_main\ProAudio\VisualStudioBuildProducts\WaveShell-DAE\Win32\Debug\vc110_ib_3.pdb'; 链接对象,好像没有调试信息 1>PlugInLib.lib(CDSPUtils.obj):警告 LNK4099:在“PlugInLib.lib(CDSPUtils.obj)”或“D:\p4client\ProAudio”中找不到 PDB 'vc110_ib_4.pdb' \dev_main\ProAudio\VisualStudioBuildProducts\WaveShell-DAE\Win32\Debug\vc110_ib_4.pdb'; 链接对象好像没有调试信息

谢谢!

4

4 回答 4

1

Build意味着只编译和链接自上次构建以来发生变化的源文件,而Rebuild意味着编译和链接所有源文件,无论它们是否改变。

构建是正常的事情,而且速度更快。有时项目目标组件的版本可能会不同步,因此需要重新构建才能使构建成功。在实践中,您永远不需要清洁。

于 2013-04-09T14:35:53.997 回答
0

我不确定它是否相关。但是你可能想检查这个线程(虽然症状与你的相反......):

VS2010 构建时未解决的外部符号错误(但不是重建)

于 2013-05-27T01:58:18.170 回答
0

'Build' 将进行增量构建,基本上遍历解决方案中的每个项目,查看自上次构建以来是否有更改,如果有,请再次构建。

“重建”将对所有内容执行清理并从头开始构建所有内容。

编辑:更详细的答案链接

于 2013-04-09T14:40:49.930 回答
0

如果您的静态库是与链接到该库的项目相同的解决方案中的另一个项目,那么您需要在两个项目之间设置依赖关系,以便构建过程首先构建库,然后构建另一个项目。

为此,请右键单击解决方案并从弹出菜单中选择“项目依赖项”。

于 2013-04-09T14:45:05.980 回答