Visual Studio 2015(C ++)sqlite3.dll未解析的外部符号

时间:2016-11-10 20:17:03

标签: c++ dll visual-studio-2015 sqlite

我无法弄清楚如何在Visual Studio中使用sqlite3.dll(或任何dll)来处理我的C ++项目。

我收到的错误消息是 LNK2001未解析的外部符号sqlite3_open

这是我到目前为止所做的:

  • 我将.dll放在myProjectFoler / Resources / sqlite3.dll
  • 我使用Visual Studio Developer命令提示符使用命令lib /def:sqlite3.def生成了sqlite3.lib
  • 我在 Project - >中引用了lib目录。偏好 - >链接器 - >一般 - >其他库目录,然后引用项目中的.lib - >偏好 - >链接器 - >输入 - >其他依赖项
  • 我将sqlite3.h放在我的项目中并且#included it

(几乎按照here

的说明进行操作

感谢您的帮助

2 个答案:

答案 0 :(得分:3)

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

sqlite3.h的这一部分负责:

#ifndef SQLITE_API
# define SQLITE_API
#endif

如果在项目属性中设置每个项目的定义:

SQLITE_API=__declspec(dllimport)

这应解决您的链接错误。 或者,你可以把

#define SQLITE_API __declspec(dllimport)

就在#include sqlite3.h之前。

答案 1 :(得分:0)

很难准确说明问题发生的原因。有很多原因可能导致LNK2001错误。 MSDN包含良好的核对清单。

您可以尝试使用/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运行时库,Debug和Release库之间不应该混淆。