问题标签 [lnk2001]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
com - vs 2005 错误 LNK2001:未解析的外部符号 (2)
"public: virtual long __stdcall PCI1761Event::GetTypeInfoCount(unsigned int *)" (?GetTypeInfoCount@PCI1761Event@@UAGJPAI@Z)
代码
类 PCI1761Event:
公共 CComObjectRoot,
公共 _IAdvDIOEvents
{
公共:
BEGIN_COM_MAP(PCI1761Event)
COM_INTERFACE_ENTRY(_IAdvDIOEvents)END_COM_MAP
()
公共:~PCI1761事件(无效);};
为什么????
c++ - 初始化 QList作为静态类成员给出 LNK2001 错误
这最好由代码本身来解释。我想使用 aQList<MyStruct>
作为静态成员,但得到一个链接器错误 2001 ( LNK2001
)。代码在文件中的顺序相同MyClass.h
有什么提示吗?Eran 的回答(见下面的评论)是正确的提示。解决了
c++ - 未解决的外部噩梦
您好行业资深人士,
我是一名大三学生,开始了我的第一次暑期编程实习,但我的想法有点过头了。我工作的公司从另一家公司购买了一个巨大的应用程序,该公司自 90 年代初以来一直在缓慢地扩展和修改它。该解决方案包含超过 200,000 行代码,分布在 300 多个文件中。据称整个解决方案是按照 ANSI-C++ 标准编写的。代码几乎完全没有文档记录,其中大部分在我看来就像象形文字。最终,我的工作是将此代码移植到嵌入式 Linux。目前,我的工作只是在 Windows XP 上使用 Visual Studio 2008 进行编译。
今天,我遇到了这样的链接器错误:
libcmtd.lib(sprintf.obj) : error LNK2005: _sprintf already defined in msvcrtd.lib(MSVCR90D.dll)
我的理解是,当解决方案中的不同项目使用不同的运行时库编译时,通常会发生这种情况。我的解决方案中有 6 个项目。其中 4 个设置为使用多线程调试 DLL 运行时库 (/MDd) 进行编译,其中一个设置为使用多线程调试库 (/MTd) 进行编译,其中一个设置为使用多线程 dll 运行时库 (/MD)。收到此错误消息后,我尝试的第一件事是将 /MTd 和 /MD 开关更改为 /MDd,以便使用相同的运行时库编译所有内容。不幸的是,这导致 afx.h 中出现以下错误:
fatal error C1189: #error : Building MFC application with /MD[d] (CRT dll version) requires MFC shared dll version. Please #define _AFXDLL or do not use /MD[d]
经过一番挖掘,我发现它已经告诉了我需要做什么。我继续将项目属性->配置属性->常规下的“使用 MFC”选项更改为“在共享 DLL 中使用 MFC”。此时我开始收到几十个未解决的外部错误,例如:
dataPropertySheet.obj : error LNK2019: unresolved external symbol "public: __thiscall CResizableSheet::CResizableSheet(unsigned short const *,class CWnd *,unsigned int)" (??0CResizableSheet@@QAE@PBGPAVCWnd@@I@Z) referenced in function "public: __thiscall CdataPropertySheet::CdataPropertySheet(unsigned short const *,class CWnd *,unsigned int)" (??0CdataPropertySheet@@QAE@PBGPAVCWnd@@I@Z)
ResizableLib.lib(ResizablePage.obj) : error LNK2001: unresolved external symbol "public: virtual int __thiscall CWnd::Create(char const *,char const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)" (?Create@CWnd@@UAEHPBD0KABUtagRECT@@PAV1@IPAUCCreateContext@@@Z)
在阅读了有关LNK2001和LNK2019的 MSDN 页面后,我意识到我不知道发生了什么。这些不是他们在学校教我们如何处理的问题。我知道我的数据结构,仅此而已。我是如何走到现在的,这超出了我的想象!
根据我有限的知识,这些模块的各种调试和发布版本似乎都纠缠在预处理器指令和#includes 的网络中。在整个解决方案的环境变量、文件名、宏等方面,几乎每个头文件和源文件中都有许多嵌套的#ifdef 检查和#define 语句。通过对我的编译器设置进行微小的更改,我似乎将程序的大部分重定向到具有非常不同函数定义的不同库。这是我对正在发生的事情的模糊概念理解。
我觉得在我有机会解决这些编译器错误之前,我需要更好地了解这段代码的工作原理。为此,我一直在尝试逐行浏览许多文件,以查看它们的引导位置、范围内的对象和变量等等。不幸的是,这并没有让我走得太远,因为对外部函数的每次调用都是模棱两可的,而且我无法通过预处理器的混乱来了解应该调用任何给定函数的哪个版本。
我一直在寻找神奇的解决方案来绘制程序并尝试理解它。我尝试了一个名为Doxygen,但要么我不知道如何正确使用它,要么它和我一样被预处理器的东西弄糊涂了。
我的问题是:
我剩下的选择是什么?
在这一点上,这是一个折腾:
a.)转换专业
b.)跳桥
这些选择都不会帮助我更好地理解这个代码库并让它编译。有没有人有更好的想法?类似的经历?圣人智慧分享?
非常感谢,
-亚历克斯
c++ - 如何遵循此链接器错误?
我正在做我的第一次实习,仍然试图在 Visual Studio 2008 上编译这个可怕的东西。我花了一个星期的时间来玩弄 IDE 设置和 Windows SDK 安装,但我认为我不会做任何事情在这个方向上取得更大进展。每个人都在这里度假,我没有高级工程师可以求助。帮助我 Stack Overflow,你是我唯一的希望!
今天,我正在尝试跟踪特定的错误,所以我知道为什么一切都失败了。也许那时我会更好地了解如何解决它。在过去的几个小时里,我一直在研究这个:
6>ResizableLib.lib(ResizablePage.obj) : error LNK2001: unresolved external symbol "public: virtual int __thiscall CWnd::Create(char const *,char const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)" (?Create@CWnd@@UAEHPBD0KABUtagRECT@@PAV1@IPAUCCreateContext@@@Z)
我的理解是在我正在使用的 ResizableLib 项目中找不到 CWnd::Create 函数。我想我会找到它被调用的文件,并跟踪包含以查看它是否应该在被调用的位置定义 CWnd::Create。我首先在整个项目 (alt+E+F+I) 中搜索 Create( 因为我认为这将获取调用 Create 函数的每个实例。我发现了其他几个以 Create 结尾的函数调用,但只有一个似乎正在调用 Create 函数本身:
ResizableGrip.cpp(127): BOOL bRet = m_wndGrip.Create(WS_CHILD | WS_CLIPSIBLINGS
所以...我打开了 ResizableGrip.cpp 并查看了包含的内容。该文件的第一行是:
#include "stdafx.h"
我想我会去检查那个文件,看看是否有 CWnd::Create 的函数声明,或者可能是它的某种继承版本。包含这个文件没有预处理条件(因为在这个程序中的许多其他点),所以我认为可以肯定地说 stdafx.h 将被包含。为了弄清楚哪个将包含 stdafx.h 文件(什么是 stdafx.h 文件通常用于什么?我到处都能看到它们!),我首先查看了与 ResizableGrip.cpp 文件相同的目录,因为我相信编译器首先看起来在检查项目中的其他包含路径之前,与包含文件位于同一目录中,最后是主要 Visual Studio VC++ 设置中列出的包含路径。它是否正确?无论如何,在同一目录中有一个 StdAfx.h 文件,所以我断定这将是包含在内的文件。文件的前几行如下所示:
我承认我并不完全理解这里发生的所有预处理器的事情,但由于没有围绕 #include 的条件,我假设它也被包含在内。项目目录中没有 afxwin.h 文件,所以我查看了项目的附加包含。唯一指定的查看位置是 ....\COMMON,所以我去了两个目录,找到了 COMMON 文件夹,然后查找 afxwin.h。那里什么都没有,所以我查看了 VC++ 目录包含的 IDE 设置。第一个清单是: $(WindowsSdkDir)\include 所以我查找了 WindowsSdkDir 环境变量,它当然不存在。我也检查了注册表。没有骰子。最终我发现您可以通过单击其中一个省略号 (... ) 出现在项目配置窗口中文本字段的最右端,当您单击它们并展开宏窗格时会出现这些窗口。通过这样做,我发现 $(WindowsSdkDir) 指向:C:\Program Files\Microsoft SDKs\Windows\v6.0A\ 所以我去了那里,打开了 Include 文件夹,并没有找到 afxwin.h 文件。$(FrameworkSDKDir)include 指向与 $(WindowsSdkDir)\include 相同的位置,因此我继续查看 Visual Studio VC++ 目录包含列表中的下一行:$(VCInstallDir)atlmfc\include 解析为 C:\Program Files\ Microsoft Visual Studio 9.0\VC\atlmfc\include\ 在那里我终于找到了 afxwin.h。在这个文件中,最后有一个名为 Cwnd 的类,其中定义了一个名为 Create 的函数:
virtual BOOL Create(LPCTSTR lpszClassName,
LPCTSTR lpszWindowName, DWORD dwStyle,
const RECT& rect,
CWnd* pParentWnd, UINT nID,
CCreateContext* pContext = NULL);
我不知道这些参数是什么,但我假设这是链接器最初抱怨的函数的一个极其重新定义的版本:
CWnd::Create(char const *,char const *,unsigned long,struct tagRECT const &,class CWnd *,unsigned int,struct CCreateContext *)
否则,编译器不会在链接器接管之前将其作为函数的不同版本捕获吗?实际上,现在我考虑了一下(这就是我发帖的全部原因),我想我所做的只是遍历代码,就像解决编译器错误一样。我做对了吗?这东西是个怪物,我只是在这里猜测。
再说一次,就像标题所说的那样,你应该如何跟踪链接器错误? 是否有与我在这里所做的类似的过程?MSDN 文章听起来像是在代码正常工作并且编译器以某种方式设法丢失 .obj 文件或 .lib 文件时发生此错误。我怎样才能让它再次指向正确的地方?
呃,-亚历克斯
winforms - 错误 LNK 2028 和 2001
我正在使用 Visual C++ 2010 中的 Windows 窗体进行项目。我正在使用BasicExcel类。以下是相关代码:
我包括头文件:
然后,当我按下按钮时,我让软件在单元格 1,4 处写入“Test str1”:
当我这样做时,我收到以下错误:
我试图修复它,但我对链接知之甚少。如果有人能启发我,我将不胜感激。谢谢!
visual-studio-2010 - Qt Q_OBJECT 在 Visual Studio 2010 中创建链接器错误
我正在尝试让 Qt 与 Visual Studio 2010 一起使用。我已经构建了一个可以在调试器中运行的工作程序。但是,当我尝试将 Q_OBJECT 宏添加到我的类时,它会生成一堆链接器错误。
我已经看到其他人提出了一些类似的问题,这似乎与编译器和 moc 以及我的初学者大脑还不能完全理解的其他一些非常复杂的技术有关。此外,其中很多似乎面向使用命令行配置编译器的人,但我使用的是 VS,我真的很想保持这种方式(基本上我只想能够按下绿色箭头并查看我的程序 - 仅此而已)。所以......如果有人能以尽可能简单的方式向我解释如何配置 Visual Studio 来执行任何链接或编译或完成此操作所需的任何操作,我将永远感激不尽。
qt - 使用 QGIS API 但获取未解析的外部符号“public:Windows 中的静态结构 QMetaObject const
我正在尝试构建一个使用 QT 和 QGIS API (1.8.0) 的应用程序。在 Linux 下我没有遇到任何问题(使用 QT 4.7.0),但在 Windows 下(使用 QT 4.8.1)我得到:
我的 .pro 文件如下:
使用 QgsVectorLayer 和 QgsRasterLayer 的类 maptoolselect 和 mapwidget 在其类定义中都有 Q_OBJECT。
任何帮助深表感谢。
非常感谢,卡洛斯
c++ - 什么库包含地图 STL 集合?
我正在尝试编译一个项目,但是当我包含一个地图对象时,它给了我一个 LNK2001 错误。我已经包含了正确的头文件,但我不知道我应该包含什么库。
我正在使用 Visual Studio 2008,当我将“忽略所有默认库”设置为“否”时,它会起作用,但是以这种方式设置属性并不是最终结果的允许选项。我以为会有某种全 STL 库,但我的代码中有向量和出队,它们工作正常。只有当我添加地图对象时才会显示错误。
msvcrt - 链接 msvcrt.lib 找不到 __imp__InterlockedCompareExchange@12
过去几天我正在尝试解决以下链接错误,但我还不知道。我猜VS和window sdk安装很好,因为还有100个其他项目正在成功构建。我到底做了什么;我制作了一个 VC 控制台项目并在其中导入了遗留代码并将其与许多静态库链接。代码中包含 _tmain 例程并在控制台上执行,我知道这是因为我有以前构建的可执行文件。请让我知道我应该在哪里查看
c++ - 错误 LNK2001:无法解析的外部符号“__declspec(dllimport) public: class QString & __thiscall QString::operator=(class QString &&)”
我迫切希望找到有关上述错误的任何信息。
我正在使用 Visual Studio 2010。当我在调试或发布时编译我的项目(32 位)时,我收到以下消息:
1>heterogeneous.obj:错误LNK2001:无法解析的外部符号“__declspec(dllimport) public: class QString & _ thiscall QString::operator=(class QString &&)”( _imp_??4QString@@QAEAAV0@$$QAV0@@Z )
1>debug\nori.exe : 致命错误 LNK1120: 1 unresolved externals
我在 Linker->Input 中链接了 QtCore4.lib,我将 Qt\4.8.2\lib 添加到 Linker->General 中的库目录中,并包含了 Qt\4.8.2\include 和 Qt\4.8.2\include\QtCore在 C/C++-> 常规中。在我看来,他们应该定义 QString。我不知道我还能做什么。
非常感谢您的帮助。