LNK2019:未解析的外部符号——隐式 DLL [重复]

Posted

技术标签:

【中文标题】LNK2019:未解析的外部符号——隐式 DLL [重复]【英文标题】:LNK2019: unresolved external symbol -- Implicit DLL [duplicate] 【发布时间】:2014-08-07 20:30:18 【问题描述】:

有很多类似的问题,但我几乎已经做了所有的事情来解决这个问题,但似乎没有任何效果

我创建了一个简单的小 Dll。

声明:

void func_A()
void func_B()

还有一些其他的东西,我给了它一个 C++ 文件名,但它基本上只是 C 程序

我已经写好了.def文件

LIBRARY "myLib.dll"

EXPORTS
    func_A          @1
    func_B          @2

Dll 创建成功。

我已确保properties->linker->input->module definition file 中存在 .def 文件

我还检查了使用Dumpbin 导出的函数,到目前为止一切都很好

现在在客户端代码中,我写了类似的标题

 extern "C" __declspec(dllimport) void func_A();
 extern "C" __declspec(dllimport) void func_B();

确实满足编译器,

已将 .lib 和 .dll 从 DLL 项目复制到客户端项目,将 .lib 保留在生成 .obj 文件的位置,并将 .dll 保留在将生成 .exe 的位置。

但我得到LNK2019: unresolved external symbol 用于 dll 函数调用

我想我确信链接器找到了 .lib,因为如果我删除 Addition Library Dependencies 我会从链接器中得到 .lib file not found error

由于没有任何效果,我也尝试在创建 .dll 时使用 __declspec(dllexport),但无济于事

【问题讨论】:

删除库依赖不能生成“找不到文件”错误。使用 dumpbin.exe 验证假设。 What is an undefined reference/unresolved external symbol error and how do I fix it? : Declared but did not define a variable or function (inconsistent declaration)的可能重复 【参考方案1】:

Now In client code, I have written header like

为时已晚。您已经将该库编译为具有 C++ 名称的 C++ 文件。您在客户端代码中执行的操作不会产生任何影响。

可能的问题是您的第一步,那就是使用这些函数名编译 DLL:

void func_A();
void func_B();

如果将其编译为 C++ 文件,这些名称将被破坏。如果这些名称被损坏,那么您的 DEF 文件必须导出损坏的名称,而不是“干净”的名称。

为确保这些名称没有被破坏,正确的做法如下:

#ifdef __cplusplus
extern "C" 
#endif

void func_A();
void func_B();

#ifdef __cplusplus

#endif

现在编译为 C++ 模块时名称不会被破坏,并且 DEF 文件中的名称现在与您要导出的函数的实际名称匹配。

【讨论】:

以上是关于LNK2019:未解析的外部符号——隐式 DLL [重复]的主要内容,如果未能解决你的问题,请参考以下文章

vc ++ MFC应用程序,错误LNK2019:未解析的外部符号

错误 LNK2019:未解析的外部符号 opencv

错误 LNK2019:未解析的外部符号

C++ LNK1120 和 LNK2019 错误:“未解析的外部符号 WinMain@16”

opencv/visual studio:错误 LNK2019:未解析的外部符号

LNK2019“未解析的外部符号”错误(C++ OpenGL)