This question already has answers here:
What is an undefined reference/unresolved external symbol error and how do I fix it?
(34个答案)
5年前关闭。
在VS2015中构建项目时,出现以下链接错误:
函数PathCombineW来自shlwapi.h,我将其包含在标题中。我觉得很困惑的部分是Intellisense很好地解析了此函数,我可以在该函数上“窥视定义”,并直接进入shlwapi.h中的声明。
如果尝试使用pathcch.h中的任何功能,我将遇到相同的确切问题。我最初使用此API是因为它似乎是更新的首选路径操作API。但是,无论使用哪种API,我都会得到完全相同的LNK2001。
我不知道这是否与我包含的其他 header 有关。它们在下面列出:
Resource.h是我的UI资源文件的头。我将它们构建到win32 GUI应用程序中。我正在Windows 7上进行开发。
仔细阅读错误帮助,我会觉得使用两个不同平台版本的代码会引起一些冲突,但是我在弄清楚到底是什么冲突时遇到了很多麻烦。在尝试进行一些路径操作并添加pathcch.h或shlwapi.h之前,该应用程序正在构建并运行正常。
为什么Intellisense可以通过链接器对未解决的外部对象大喊大叫?找不到函数定义的库吗?我的订单是否包含问题?
我的核心问题是双重的:
智能感知如何找到功能但链接器找不到?
如果问题是找不到函数的定义,我如何得知要为目标平台(Windows 7)编写应用程序需要包括哪些库?我在获取有关MSDN上的信息时遇到了很多麻烦。是否有某种高级教程或页面来说明不同平台的构建规范的细微差别?
并将
(34个答案)
5年前关闭。
在VS2015中构建项目时,出现以下链接错误:
函数PathCombineW来自shlwapi.h,我将其包含在标题中。我觉得很困惑的部分是Intellisense很好地解析了此函数,我可以在该函数上“窥视定义”,并直接进入shlwapi.h中的声明。
如果尝试使用pathcch.h中的任何功能,我将遇到相同的确切问题。我最初使用此API是因为它似乎是更新的首选路径操作API。但是,无论使用哪种API,我都会得到完全相同的LNK2001。
我不知道这是否与我包含的其他 header 有关。它们在下面列出:
// 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上的信息时遇到了很多麻烦。是否有某种高级教程或页面来说明不同平台的构建规范的细微差别?
最佳答案
链接器在寻找.lib
文件,IntelliSense仅在使用 header 。要生成可执行文件(编译+链接),您需要两者兼有。
PathCombine
的文档的底部有一个漂亮的表,其中列出了定义该函数的 header 以及链接器链接该函数所需的库。
对于PathCombine
,表如下所示:
+----------------------------------------------------------------------------------------+ | Minimum supported client | Windows 2000 Professional, Windows XP [desktop apps only] | +----------------------------------------------------------------------------------------+ | Minimum supported server | Windows 2000 Server [desktop apps only] | +----------------------------------------------------------------------------------------+ | Header | Shlwapi.h | +----------------------------------------------------------------------------------------+ | Library | Shlwapi.lib | +----------------------------------------------------------------------------------------+ | DLL | Shlwapi.dll (version 4.71 or later) | +----------------------------------------------------------------------------------------+ | Unicode and ANSI names | PathCombineW (Unicode) and PathCombineA (ANSI) | +----------------------------------------------------------------------------------------+
Reading this chart tells us that to get this function we'd want to use
#include <Shlwapi.h>
并将
Shlwapi.lib
添加到链接程序的库列表中。它还告诉我们,如果要动态调用该函数,则可以调用LoadLibrary
并将Shlwapi.dll
传递给它,然后使用GetProcAddress
查找PathCombineA
或PathCombineW
函数。10-08 20:02