Visual C++ - 看不到缺失的外部文件

7
我尝试在Visual C++ 10的发布模式下构建我的多项目应用程序。
我遇到了以下链接错误:
2> 所有输出都是最新的。 2>PidAppLib.lib(ThreadWin32.obj):错误 LNK2011:未链接预编译对象;映像可能无法运行
2>C:\ infinite_memories_svn \ projects \ sw \ NewPidTools \ PidWriter \ Release \ PidLabler.exe:致命错误LNK1120:1个未解决的外部
2>
2>生成失败。

如何知道哪个对象未解决?
ThreadWin32.obj是从互联网下载的外部库。


在调试中它是可以工作的... 我猜问题可能出在预编译对象上,但我不知道具体是什么问题。 - Costa Mirkin
你尝试过“全部重建”吗?(抱歉 - 我知道这很基础,但你永远不知道) - MiMo
你能检查一下库的设置,确保它们被正确地设置为释放状态吗?我发现我把它们设置成了调试状态才让代码工作,并且忘记改回发布状态。 - Bartek Banachewicz
2个回答

6

好的。
我已经解决了这个问题。
我有两个库,假设为a.lib和b.lib,以及一个项目c。a.lib使用了b.lib,所以在a.lib的库依赖中我加入了b.lib,在c中使用了a.lib,所以我加入了a.lib到依赖中。
在debug模式下它可以运行,但是在release模式下我也应该将b.lib添加到c的依赖项中。
奇怪,但是这样解决了问题。


此链接提供了关于该问题更好的解释 Programming Bits - MLS

3
我在进行大型项目重构时遇到了这个错误。在重构过程中,我偶尔会编译单个源文件以检查我所做的更改,而不必构建整个项目。根据您的项目配置,这可能导致.obj文件被输出到与构建项目时不同的目录中。在我的情况下,手动编译的源文件的.obj文件被输出到源代码目录中,而不是中间构建目录。
这似乎有一个副作用,即当构建整个项目时,手动编译的源文件可能不会重新编译,即使其他地方的更改需要重新编译预编译头文件。
我的解决方案是手动删除通过手动编译单个源文件生成的所有.obj文件。根据项目配置,在项目上执行"Clean"也可能起作用。

确实,清理/重建解决了我的这个问题。 - aquirdturtle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接