How can I resolve “error LNK2019: unresolved external symbol”?
我有一个我正在开发的MFC应用程序,需要有一个嵌入式数据库。所以我去寻找一个光滑、快速的"可嵌入"数据库,然后偶然发现了AccrossSQLite。
我用它创建了一个数据库,用Visual Studio 2008创建了一个静态库项目。图书馆项目将用于另一个主要项目。
在库项目中,我用方法
编译静态库时,没有检测到错误,但是当我尝试在主项目中使用库项目文件时,我会得到以下类型的错误:
1 2 3 4 5 | error LNK2019: unresolved external symbol"public:void __thiscall CppSQLite3DB::close(void)" (?close@CppSQLite3DB@@QAEXXZ referenced in function"public: int __thiscall CTalkingFeedsDB::AddFeedToDB(class CFeed,char const*)" (? AddFeedToDB@CTalkingFeedsDB@@QAEHVCFeed@@PDB@Z |
我错过了什么?
我知道这个问题已经过去两年了…但我在这里也遇到了同样的情况。添加了所有头文件…添加了lib目录..继续犯这个错误。因此,我手动将lib添加到配置属性->链接器->输入->附加依赖项中。一切都为我工作。
我不止一次想到符号
链接器错误的原因将在编译步骤中找到:编译器将生成要导入的
不知道是否是您的情况,但imp前缀可能意味着您正在Win32项目中编译x64库。
编译器和链接器不会将一个库链接到另一个库(除非其中一个库是DLL)。您需要在主项目中指定两个库(cppsqlite3.lib和您自己的静态库)。
我将遵循以下步骤:
考虑一下希望通过哪个库或.obj文件导出符号。
检查它是否真的导出了那个符号(检查字符)。有时,这是呼叫约定的不同。
检查您希望包含符号的库是否为链接器已知-首先检查"附加库",然后检查是否确实找到了该库(我主要通过使用SysInternals中的filemon.exe来执行此操作,并查找link.exe以打开lib文件)。
经过一段时间的思考,您可能会发现您的库项目不会导出所需的函数。该函数在数据库库中。您应该将该lib添加到主项目中。将它添加到静态lib项目中是没有用的。
您要么需要将codeproject sqlite lib链接到可执行文件,要么直接将源文件包含在项目中。(你是做哪一个的?)