我有一个文件foo.h
,它有各种函数声明。所有这些功能都在文件foo.dll
中实现。但是,当我包含.h文件并尝试使用任何函数时,我收到错误:
bar.obj : error LNK2019: unresolved external symbol SomeFunction
显然没有找到函数实现。
我该怎么做才能帮助编译器找到DLL中的定义并将它们与.h文件关联起来?
我见过有关__declspec(dllexport)
和__declspec(dllimport)
的一些内容,但我仍然无法弄清楚如何使用它们。
答案 0 :(得分:11)
您应该已经从DLL所有者收到了至少三个文件。你在运行时需要的DLL,带有导出函数声明的.h文件,你已经有了。和.lib文件,DLL的导入库。链接器需要哪个,因此它知道如何将函数添加到程序的导入表中。
您缺少告诉链接器需要链接.lib文件的步骤。它需要添加到项目的链接器的Input + Additional Dependencies设置中。或者最容易通过在源代码中编写链接器指令来完成:
#include "foo.h"
#pragma comment(lib, "foo.lib")
哪个适用于MSVC,不是便携式但链接永远不会。将.lib文件复制到项目目录或指定完整路径。
答案 1 :(得分:8)
我遇到了类似的问题。解决方案结果是DLL是64位,使用它的简单应用程序是32.我忘了在Configuration Manager中将其更改为x64。
答案 2 :(得分:3)
一些有用的入门链接:: MSDN Documentation,SO,Random