Visual Studio C++:获取未解析的标记和未解析的链接。我该怎么办?

Posted

技术标签:

【中文标题】Visual Studio C++:获取未解析的标记和未解析的链接。我该怎么办?【英文标题】:Visual Studio C++ : Getting Unresolved tokens and unresolved link. What should I do? 【发布时间】:2014-11-23 11:47:43 【问题描述】:

我想使用 SQLite,但我得到了 unresolved-* 错误。以下是我所做的总结:

这里是三个目录:

源文件

-->include
-->src
-->sqlite3

我已将以上三个目录添加到:

Project Properties->C/C++->Additional Include Directories

然后在我的 main.cpp 文件中,我添加了以下行:

#include<SQLite/SQliteCpp.h> // this inclusion is correct

但我得到如下错误:

error LNK2028: unresolved token (0A0003DF) "public: virtual __thiscall SQLite::Column::~Column(void)" (??1Column@SQLite@@$$FUAE@XZ) referenced in function "public: virtual void * __thiscall SQLite::Column::`vector deleting destructor'(unsigned int)" (??_EColumn@SQLite@@$$FUAEPAXI@Z)
error LNK2028: unresolved token (0A0003EE) "public: __thiscall SQLite::Statement::Ptr::Ptr(class SQLite::Statement::Ptr const &)" (??0Ptr@Statement@SQLite@@$$FQAE@ABV012@@Z) referenced in function "public: __thiscall SQLite::Column::Column(class SQLite::Column const &)" (??0Column@SQLite@@$$FQAE@ABV01@@Z)
error LNK2028: unresolved token (0A0003EF) "public: __thiscall SQLite::Statement::Ptr::~Ptr(void)" (??1Ptr@Statement@SQLite@@$$FQAE@XZ) referenced in function "public: __thiscall SQLite::Column::Column(class SQLite::Column const &)" (??0Column@SQLite@@$$FQAE@ABV01@@Z)
error LNK2019: unresolved external symbol "public: __thiscall SQLite::Statement::Ptr::Ptr(class SQLite::Statement::Ptr const &)" (??0Ptr@Statement@SQLite@@$$FQAE@ABV012@@Z) referenced in function "public: __thiscall SQLite::Column::Column(class SQLite::Column const &)" (??0Column@SQLite@@$$FQAE@ABV01@@Z)
error LNK2019: unresolved external symbol "public: __thiscall SQLite::Statement::Ptr::~Ptr(void)" (??1Ptr@Statement@SQLite@@$$FQAE@XZ) referenced in function "public: __thiscall SQLite::Column::Column(class SQLite::Column const &)" (??0Column@SQLite@@$$FQAE@ABV01@@Z)

【问题讨论】:

您包含源 (cpp) 文件而不是标题?上次我使用 sqlite,它的“合并”版本有正常的标题。 对不起,这是一个错字。不,我已包含标题... (.h) 您是否已将所有相关的 .c/.cpp 文件添加到您的解决方案中? (来自 src 和 sqlite3 目录) 我只是添加了上面三个目录而已:| @MostafaTalebi 我有一段时间没有使用 SQLite,但你不应该链接到 sqlite.lib 或其他东西吗?还是有只有标题的版本? 【参考方案1】:

假设您使用的是标准的 sqlite 源代码分发,应该有一个 .c 或 .cpp 文件 在您的 sqlite3 目录中。该文件需要包含在项目中并与您的源代码一起编译。另一种可能性是您可能已经收到带有 .lib 文件的 sqlite3 标头 - 如果是这种情况,那么您需要将库与您的项目链接起来。

您收到这些错误的原因是您的头文件 (sqlite3.h) 引用了函数/符号/等。没有定义。因此,这就是为什么您需要将 .c/.cpp 文件与您的项目一起包含(以便您提供定义),或者链接到基本上做同样事情的预编译 .lib。

【讨论】:

我查了一下,然后在这里报告 顺便说一下,这是我的一个使用 SQLite3 的项目:github.com/Amadeus-/isxSQLite。虽然该项目可能对您没有多大用处(它将为另一个软件创建一个 DLL“扩展”),但它应该可以开箱即用地编译。也许然后您可以看到它是如何链接/组织的,并确定您需要做什么来修复您的项目。

以上是关于Visual Studio C++:获取未解析的标记和未解析的链接。我该怎么办?的主要内容,如果未能解决你的问题,请参考以下文章

C++:Visual Studio 2015 中未解析的外部符号 _sprintf 和 _sscanf

在 Visual Studio 上的 C++ 项目中将 NetCDF(通过 vcpkg 安装)与 CMake 一起使用时未解析的外部符号

Visual Studio/CMake 中未解析的外部符号 cuda_library::foo(int)

如何使用 Visual Studio 2019 和 c++ 链接 OpenSSL 库?

包含上的 Visual Studio C++“未找到函数定义”

C++ 代码未在 Visual Studio 中运行