问题标签 [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.

0 投票
2 回答
1941 浏览

visual-studio-2008 - 为什么在 VS2003 中编译的 .lib 无法与使用 VS2008 编译的代码链接?

在尝试将使用 Visual Studio Express 2008 编译的一组代码与使用 Visual Studio 2003 编译的 .lib 链接时,我们刚刚获得了一次有趣的体验。全部使用 C++。准确地说,是在VS2003中编译成.lib的SystemC 2.2.0内核,在VS2008中编译的SystemC模型。

在链接时,我们不断收到错误,即在链接期间未找到 SystemC.lib 文件(即在 VS2003 中编译)中的一些符号。我们得到的错误是这样的(在一些变体中):

从各种线索中挖掘,事实证明 .lib 期望找到的函数是这样的:

虽然 VS2008 试图链接的库文件 (libcpmt.lib) 使用了不同的调用约定:

我试图弄清楚为什么会发生这种不兼容,但最后我放弃了,在 VS2008 中重新编译了完全相同的 Visual Studio 项目,并使用了 SystemC.lib 而不是 VS2003 中的那个。现在,一切都很顺利。

所以这里的基本问题是:从 VS2003 到 VS2008 发生了什么变化,会导致某些函数改变它们的调用约定?是否有一些魔术标志可以给 VS2008 中的链接器以使用其他库,其中函数具有与 VS2003 编译中相同的调用约定?

更新,到目前为止的答案摘要:微软很可能将 C++(不是 C,只是 C++)ABI 从 Visual Studio 的一个主要版本更改为下一个。库中还可能存在其他导致不兼容的更改。最好的建议是为每个版本的 VS 重新编译 .lib。本质上,只需将其以源代码形式发送给用户,并让他们使用他们碰巧安装的任何版本的 VS 在本地编译它。

通过使用以下建议发现了基本问题:

请注意,这些问题没有回答这个问题:

0 投票
2 回答
2399 浏览

windows - 实现 IUnknown,未解析的外部符号

我正在尝试创建一个实现IUnknown接口的类。我在头文件中有以下代码:

我已经包括了相关的uuid.lib和其他几个。但是,当我尝试编译时,出现错误:

错误 2 错误 LNK2001: 无法解析的外部符号 "public: virtual long __stdcall Vmr9Presenter::QueryInterface(struct _GUID const &,void * *)" (?QueryInterface@Vmr9Presenter@@UAGJABU_GUID@@PAPAX@Z) Vmr9Presenter.obj VmrPresenter

这让我相信有些东西没有被拉进来。关于如何摆脱这个错误的任何建议?

0 投票
1 回答
249 浏览

linker - 链接 C++ - BDB - LNK2001

BDB 在同一台 PC 上编译,在同一 VS 下。

#include <db_cxx.h> int main(){ Db b(NULL, 0); return 0; }

1>main.obj : 错误 LNK2001: 无法解析的外部符号 ""public: virtual __thiscall Db::~Db(void)" (??1Db@@UAE@XZ)"

1>main.obj : 错误 LNK2001: 无法解析的外部符号 ""public: __thiscall Db::Db(class DbEnv *,unsigned int)" (??0Db@@QAE@PAVDbEnv@@I@Z)"

有什么问题?

0 投票
2 回答
729 浏览

c++ - 代码中的 LNK2001 错误

我收到 LNK2001 错误。代码已包含在下面。有人可以帮我吗?

//更新动作.h

// InstrumentCache.h

//fisClient.h

性能测试.cpp

0 投票
1 回答
501 浏览

dll - LNK2001:我忘了设置什么?

继我之前关于调试本机代码的问题之后,我决定从控制台应用程序创建一个简单的测试,因为我无法直接调试服务。

所以我创建了一个 vc6 控制台应用程序,将 dll 项目添加到工作区并运行它。

它没有按预期执行,而是吐出以下链接器错误:

这似乎是在链接器选项中忘记某些内容的简单情况:但是一切似乎都很正常,并且 lib 文件、dll 和源代码可用。如果我将 lib 文件更改为无意义的加载,它会启动fatal error LNK1104: cannot open file "asdf.lib",所以这不是问题。

我之前已经链接到 dll 并且它们刚刚工作,所以我忘了做什么?

更新:根据此线程,我查看是否可以找到任何其他信息。这就是 VS2005 的垃圾箱给我的。

然后通过 undname 运行它会导致:

这是错误的。如果我从 IDE 中输入损坏的名称,它会给出更好的结果:

现在我有了这些信息,我能用它做什么?从这篇Raymond Chen 文章看来,我可以手动修复它,但可以调整一个选项,但我无法从结果中辨别出需要什么选项(是否有“忽略所有参数”复选框?!)。

因此,它似乎正在寻找不存在的函数或函数的参数已被忽略(或 dumpbin 不喜欢 VC6 库),但它仍然没有让我更接近解决问题的目标。

0 投票
1 回答
559 浏览

visual-c++ - LNK 2001 结构错误

我有一个 h- 和一个 cpp 文件,其中包含在我的许多项目中使用的一些计算。

现在我尝试将它们放在一个单独的 dll 中,因此这些文件不应包含在每个项目中。

链接时,我得到一个结构的 LNK2001(未解析符号)错误,但是 lib 和 dll 位于正确的位置。

我用

宏,它适用于几种方法。

结构是这样定义的

并且在使用来自 dll 的这个结构的文件中,它的定义也正确(?)

错误信息是:

有什么提示吗?谢谢

0 投票
2 回答
2767 浏览

c++ - LNK2019 / 2001:未解析的外部符号

我在网上看到过类似的问题,这些问题是人们忘记包含某些内容等问题。但是,在从 subversion 检查我们的代码后,我遇到了这个错误——其他人也做了同样的事情,但没有遇到这个问题。我的问题:在 Visual Studio 设置中(但不会影响 .sln 文件)或在 Visual Studio 之外,我的机器上是否发生了任何可能导致此链接器错误的事情?

Lnk2019,从这里说:

Lnk2001,从这里开始

编辑:LNK2019 错误是由最初的 LNK2001 错误引起的(在创建某个 dll 的问题上)。如果我从我们团队的其他人那里获得该 dll(并将创建日期调整为明天,以便 VS 不会删除它),我可以编辑和调试。当然,我不想求助于解决方法......

0 投票
1 回答
546 浏览

dll - 如何将变量传递给 DLL 导出的函数,我得到错误 LNK2001

我必须将 HWND 变量从主程序传递给 DLL 导出的函数。变量称为 mainHwnd,DLL 以这种方式定义:

mydll.h

mydll.cpp

主程序

编译我得到

在使用 dumpbin /exports mydll.dll 时,我得到全局变量名被破坏为:

我在谷歌上浏览了很多页面都没有结果。也许有一个概念错误..谢谢

0 投票
1 回答
539 浏览

c++ - 如何解决 LNK2001

我有一组用 VS 6 编写的代码。我正在尝试在 VS 2008 中为此编写一个 CLI 包装器。我在 CLI 代码中包含了一个 VS6 头文件并进行了编译。

编译时我得到

LNK2001: unresolved external symbol "public: virtual void __thiscall Someclass::SomeMethod(SomeObject& os).

当我在错误中搜索方法和类时,它对应于代码,

头文件。

CPP 文件


SomeMethod 实际上是从 ParentClass 覆盖的

当我通过添加打开和关闭花括号作为头文件中的声明时

错误消失。但我不能这样做,因为它会导致一种方法有两个实体。为什么会出现这种行为?我该如何克服呢?或者我是否必须在 CLI 中包含 BS6 标头时放置任何#pragma?

0 投票
1 回答
2194 浏览

c++ - C++/CLI DLL 项目从 VS2008 转换到 VS2010 后停止链接

我将一个使用非托管 C++ LIB 的完美运行的托管 C++ DLL 项目从 VS2008 转换为 VS2010。事先我用 VS2010 分别重建了 LIB(它们是我无权管理的另一个项目的一部分)。但是,在转换后,我的托管 DLL 项目停止链接,给我一些 LNK2001 错误消息(请参见下面的示例)。在“string”和“iosfwd”标头中定义的有关“std”实体的所有错误。我缺少哪些编译器/链接器设置?

在此先感谢您的帮助。