Visual Studio 2010 C++:如何判断链接器实际尝试链接的 LIB 文件?

Posted

技术标签:

【中文标题】Visual Studio 2010 C++:如何判断链接器实际尝试链接的 LIB 文件?【英文标题】:Visual Studio 2010 C++: How to tell which LIB files the linker actually tries to link? 【发布时间】:2013-01-28 13:27:11 【问题描述】:

我正在使用 Visual Studio 2010 Pro 中的(非托管)x64 Win32 C++ 应用程序,并且不断收到奇怪的链接错误。

此应用程序通过包含windows.h 来使用LoadImage() Windows API 函数。虽然应用程序在 Release 配置中编译得很好(并且LoadImage() 完成了它的工作),但我无法在 Debug 配置中获得链接的可执行文件。我不断收到此错误:

Redacted.obj : error LNK2019: unresolved external symbol __imp_LoadImageW referenced in function "public: int __cdecl Redacted::Redacted::Execute(void)" (?Execute@Redacted@Redacted@@QEAAHXZ)
C:\Users\redacted\Documents\Visual Studio 2010\Projects\Redacted\x64\Debug\Redacted.exe : fatal error LNK1120: 1 unresolved externals

如果我从 Unicode 切换到非多字节字符集,错误消息将相应地从 LoadImageW() 更改为 LoadImageA(),但否则会持续存在。由于我在 Release 和 Debug 配置的属性中找不到任何相关差异,我不知道为什么它会编译成一个,而不是另一个。 User32.lib 在两种配置中都被正确设置为链接器的附加依赖项,并且/MACHINE:X64 标志也被设置在两者中。

由于链接器没有抱怨找不到User32.lib,我被引导相信它试图从平台 SDK 链接错误版本,即 32 位版本。但是我如何才能找出链接器实际尝试使用的 LIB 文件的确切副本?

【问题讨论】:

【参考方案1】:

检查全局配置设置中的链接器路径。很可能其中一个是错误的。

除此之外,我相信还有一个链接器 /VERBOSE 标志(或类似标志)将显示您正在寻找的信息。它位于您正在构建的项目的链接器设置中。

【讨论】:

谢谢! /VERBOSE 标志,隐藏在奇怪地命名为“显示进度”属性下,有效,它告诉我它甚至根本没有尝试链接 User32.lib。事实证明我错了它被设置为无处不在的附加依赖项:似乎在某个地方,我不小心删除了调试配置的“从项目默认值继承”复选标记。因此,即使 User32.lib 出现在列表中,它实际上并没有链接。

以上是关于Visual Studio 2010 C++:如何判断链接器实际尝试链接的 LIB 文件?的主要内容,如果未能解决你的问题,请参考以下文章

visual studio2010 c++头文件怎么写

如何在 Visual Studio 2010 Ultimate 中创建 C++ 项目

在 C++ 中添加多行注释时如何在 Visual Studio 2010 中启用自动星号?

如何防止 Visual Studio 2010 在 C++ 中向我的项目添加大型 SQL 文件?

Visual Studio 2010中的Visual C++如何编译、连接和运行?

Visual Studio 2010 C++:如何判断链接器实际尝试链接的 LIB 文件?