当前位置:  开发笔记 > 编程语言 > 正文

如何解决"错误LNK2019:未解析的外部符号"?

如何解决《如何解决"错误LNK2019:未解析的外部符号"?》经验,为你挑选了3个好方法。

我有这个我正在研究的MFC应用程序需要有一个嵌入式数据库.所以我去寻找一个光滑,快速的"可嵌入"数据库,并且偶然发现了SQLite.

我用它创建了一个数据库,然后用Visual Studio 2008创建了一个静态库项目.库项目将用于另一个主项目.

在库项目中,我DBClass用方法创建了一个类AddFeedToDB(CFeed f).库项目使用.libcodeproject(cppsqlite3.lib)中的文件.

编译静态库时,没有检测到错误,但是当我尝试在主项目中使用库项目文件时,我得到以下类型的错误:

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

我错过了什么?



1> 小智..:

我知道这个问题已经有2年了...但我在这里遇到了同样的情况.添加了所有头文件...添加了lib目录..并继续出现此错误.所以我手动将lib添加到配置属性 - >链接器 - >输入 - >有条件的依赖关系,这一切都适合我.



2> xtofl..:

它发生在我身上不止一次,我认为符号XXX(即?close@CppSQLite3DB@@QAEXXZ)在导入库,而实际符号为__impXXX(即__imp?close@CppSQLite3DB@@QAEXXZ).

然后在编译步骤中找到链接器错误的原因:编译器将生成?close@CppSQLite3DB@@QAEXXZ要导入的符号,它应该在哪里生成__imp?close@CppSQLite3DB@@QAEXXZ.这通常意味着函数声明本身没有__declspec( dllimport ).这可能是由某些预处理器符号未定义引起的.或者__declspec根本不存在......



3> 小智..:

不知道是不是你的情况,但imp前缀可能意味着你正在Win32项目中编译x64库.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有