在VS2015建设项目时,我得到以下链接错误:获得LNK2001智能感知可以找到功能
LNK2001解析的外部符号__imp__PathCombineW @ 12
功能PathCombineW是SHLWAPI。小时,我已经包含在我的标题中。我觉得这部分令人困惑的是,Intellisense解析了这个函数就好了,我可以在函数中“窥探定义”,并且它在shlwapi.h中声明了我的权利。
如果我尝试使用pathcch.h中的任何函数,我都有同样的确切问题。我最初使用这个API,因为它似乎是更新的,首选的路径操作API。不过,我可以通过API获得与LNK2001完全相同的结果。
我无法弄清楚它是否与我包含的其他头文件有关。他们被列在下面:
// daqServiceTray.cpp
#include "stdafx.h"
#include "daqServiceTray.h"
#include <Shlwapi.h>
#include <Shellapi.h>
#include <Strsafe.h>
//stdafx.h
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN
#ifndef _UNICODE
#define _UNICODE
#endif
#ifndef UNICODE
#define UNICODE
#endif
#include <windows.h>
//targetver.h
#pragma once
#define WINVER 0x0601
#define _WIN32_WINNT 0x0601
#include <SDKDDKVer.h>
//dayServiceTray.h
#pragma once
#include "resource.h"
Resource.h是我的UI资源文件的标题。我将这些构建到一个win32 GUI应用程序中。我正在Windows 7上进行开发。
通读错误帮助我通过使用来自两个不同平台版本的代码导致了一些冲突,但我在计算出可能发生的冲突时遇到了很多问题。在我尝试做一些路径操作并添加了pathcch.h或shlwapi.h之前,该应用程序正在构建并运行正常。
为什么intellisense可以通过链接器在我身上找到一个功能来解决未解决的外部问题?它能否找到函数定义的库?我的命令是否包含一个问题?
我的核心问题是双重的:
如何找到智能感知功能,但链接不能?
如果问题是无法找到该函数的定义,那么如何才能了解为我的目标平台(Windows 7)编写应用程序时需要包含哪些库?我在MSDN上获取这些信息时遇到了很多麻烦。是否有某种高级教程或页面解释了不同平台的构建规范的细微差别?
在C头文件中声明函数与链接时链接它不同。它们是构建过程的两个独立步骤,都是正确编译所必需的。但是,IntelliSense很可能只使用头文件(如果不是它自己的函数签名目录),因为这是存储类型信息的地方。我不知道它究竟是怎么回事,但我确实知道它不需要链接器信息来完成它的工作。 – andlabs
智能感知只需要声明。链接器需要一个定义。我没有看到任何令人困惑的东西,这就是这些工具的工作原理。要修复此问题,请链接到Shlwapi.lib,如[PathCombine](https://msdn.microsoft.com/en-us/library/windows/desktop/bb773571.aspx)中所述。 – IInspectable
至于在MSDN上寻找链接信息,该信息位于涵盖函数的每个页面的底部。有一张整洁的桌子;该表的第一行显示“最低支持客户端”。 “图书馆”行说明你需要链接的图书馆。这总是以“somename.lib”的形式出现。我不使用Visual Studio,所以我不知道如何将库添加到链接库的列表中,但是请检查您的项目属性。 – andlabs