Visual Studio 2015(C+;+;)sqlite3.dll未解析的外部符号 < >我无法计算如何在VisualStudio./P>中使用SqleE3.3.DLL(或任何DLL)来处理我的C++项目。

Visual Studio 2015(C+;+;)sqlite3.dll未解析的外部符号 < >我无法计算如何在VisualStudio./P>中使用SqleE3.3.DLL(或任何DLL)来处理我的C++项目。,c++,dll,visual-studio-2015,sqlite,C++,Dll,Visual Studio 2015,Sqlite,我得到的错误消息是LNK2001未解析外部符号sqlite3\u open 以下是我到目前为止所做的: 我将.dll放在myProjectFoler/Resources/sqlite3.dll中 我使用visualstudiodeveloper命令提示符生成了sqlite3.lib,该命令使用命令lib/def:sqlite3.def 我在Project->Preferences->Linker->General->Additional Library目录中引用了带有lib的目录,然后在Pro

我得到的错误消息是LNK2001未解析外部符号sqlite3\u open

以下是我到目前为止所做的:

  • 我将.dll放在myProjectFoler/Resources/sqlite3.dll中
  • 我使用visualstudiodeveloper命令提示符生成了sqlite3.lib,该命令使用命令
    lib/def:sqlite3.def
  • 我在Project->Preferences->Linker->General->Additional Library目录中引用了带有lib的目录,然后在Project->Preferences->Linker->Input->Additional dependencies中引用了.lib
  • 我将sqlite3.h放在我的项目中,并将其包括在内
(基本上遵循了所看到的说明)


感谢您的帮助

问题在于,默认情况下,头文件假定sqlite是静态链接的,而不是动态链接到dll

sqlite3.h的这一部分负责:

#ifndef SQLITE_API
# define SQLITE_API
#endif
如果在“项目属性”中设置“每个项目定义”:

SQLITE_API=__declspec(dllimport)
这将解决您的链接错误。 或者,您可以将

#define SQLITE_API __declspec(dllimport)

就在包含sqlite3.h.

之前,问题是默认情况下头文件假定sqlite是静态链接的,而不是动态链接到dll

sqlite3.h的这一部分负责:

#ifndef SQLITE_API
# define SQLITE_API
#endif
如果在“项目属性”中设置“每个项目定义”:

SQLITE_API=__declspec(dllimport)
这将解决您的链接错误。 或者,您可以将

#define SQLITE_API __declspec(dllimport)

就在您将sqlite3.h包含在其中之前,很难确切地说出问题发生的原因。有很多原因可能导致
LNK2001
错误。包含良好的检查列表

您可以尝试使用
/VERBOSE
选项来确定链接器引用的文件。将此选项放入
Project->Preferences->Linker->Command Line->Additional Options
中。输出应包含类似的字符串:

Searching e:\SQLite\sqlite-dll-win32-x86-3150100\sqlite3.lib:
      Found _sqlite3_open
         Referenced in ConsoleApplication2.obj
         Loaded sqlite3.lib(sqlite3.dll)

请注意VS运行时库,调试库和发布库之间不应混淆。

很难确切说明问题发生的原因。有很多原因可能导致
LNK2001
错误。包含良好的检查列表

您可以尝试使用
/VERBOSE
选项来确定链接器引用的文件。将此选项放入
Project->Preferences->Linker->Command Line->Additional Options
中。输出应包含类似的字符串:

Searching e:\SQLite\sqlite-dll-win32-x86-3150100\sqlite3.lib:
      Found _sqlite3_open
         Referenced in ConsoleApplication2.obj
         Loaded sqlite3.lib(sqlite3.dll)

请注意VS运行时库,调试库和发布库之间不应混淆。

我不确定您所说的每个项目定义是什么意思,但添加您之前提供的代码#include sqlite3.h不幸的是,它不管用,应该是u declspec(dllimport)感谢您的快速响应,但它仍然会产生同样的错误编辑:唯一的区别是它现在说的是uu imp_sqlite3_open而不是仅仅sqlite3_open我不确定你所说的每个项目定义是什么意思,但是添加你之前提供的代码35; include sqlite3.h不幸的是,这并不管用我的错,应该是u declspec(dllimport)谢谢你的快速响应,但它仍然会产生同样的错误编辑:唯一的区别是它现在说的是uuu imp_sqlite3_open,而不是仅仅说sqlite3_open,所以我添加了verbose选项,我猜如果它在path/sqlite3.lib之后没有说
found
,它不会加载它。但我不明白,这条路径是绝对正确的。@finrod我已经添加了链接器输出,以确保成功。在其他情况下,请仔细检查链接器配置。是否生成与配置相同的配置,例如“调试”和“生成调试”?我已对链接器配置进行了三次检查,并对所有配置进行了设置。同时,我将sqlite3.c添加到我的项目中。它确实使构建时间更长一些,但至少可以工作。不过我想弄清楚这一点。谢谢你的努力。所以我添加了verbose选项,我猜如果它在path/sqlite3.lib之后没有说
found
,它就不会加载它。但我不明白,这条路径是绝对正确的。@finrod我已经添加了链接器输出,以确保成功。在其他情况下,请仔细检查链接器配置。是否生成与配置相同的配置,例如“调试”和“生成调试”?我已对链接器配置进行了三次检查,并对所有配置进行了设置。同时,我将sqlite3.c添加到我的项目中。它确实使构建时间更长一些,但至少可以工作。不过我想弄清楚这一点。谢谢你的努力。