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:未解析的外部符号
C++ LNK1120 和 LNK2019 错误:“未解析的外部符号 WinMain@16”