获得LNK2001,但智能感知可以找到功能
Getting LNK2001 yet Intellisense Can Find Function
在VS2015中构建项目时,我得到以下链接错误:
LNK2001无法解析的外部符号__imp__PathCombineW@12
函数PathCombineW来自我在头文件中包含的shlwapi.h。我觉得很困惑的部分是智能感知解决这个函数很好,我可以在函数上"偷看定义",它把我带到shlwapi.h中的声明。
如果我尝试使用pathch .h中的任何函数,我也会遇到同样的问题。我最初使用这个API是因为它似乎是较新的首选路径操作API。然而,我得到了完全相同的LNK2001与任何API。
我不知道它是否与我所包含的其他头有关。它们如下:
// 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上开发。
通过阅读错误帮助我得到的感觉,就像我正在引起一些冲突使用代码从两个不同的平台版本,但我有很多麻烦弄清楚冲突可能是什么。在我尝试进行一些路径操作并添加pathchh或shlwapi.h之前,应用程序正在构建并运行正常。
为什么智能感知可以找到链接器向我大喊一个未解决的外部函数?它找不到函数定义的库吗?我的包的顺序有问题吗?
我的核心问题是双重的:
为什么智能感知能找到函数而链接器却找不到?
如果问题是无法找到函数的定义,我如何了解为我的目标平台(windows 7)编写应用程序需要包含哪些库?我一直有很多麻烦在MSDN上获得这些信息。是否存在某种高级教程或页面来解释不同平台构建规范的细微差别?
为什么智能感知可以找到函数,而链接器不能?
链接器正在寻找.lib
文件,智能感知只是使用头文件。要生成一个可执行文件(编译+链接),你需要这两个。
如果问题是无法找到函数的定义,我如何了解为我的目标平台(windows 7)编写应用程序需要包含哪些库?
PathCombine
的文档底部有一个漂亮的表,说明函数定义在哪个头文件中,以及链接器需要链接哪个库。
对于PathCombine
,表看起来像这样:
阅读这张图表告诉我们,要得到这个函数,我们需要使用
#include <Shlwapi.h>
并将Shlwapi.lib
添加到链接器的库列表中。它还告诉我们,如果我们想动态调用函数,我们可以调用LoadLibrary
并将Shlwapi.dll
传递给它,然后使用GetProcAddress
来查找PathCombineA
或PathCombineW
函数。
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 对可变参数使用声明.如何选择正确的功能
- 获得LNK2001,但智能感知可以找到功能
- 智能感知:不存在从"std::string"到"char"的合适转换功能,那么我该怎么做?
- 为什么Visual Studio的智能感知显示私有成员和功能?