我有这个我正在研究的MFC应用程序需要有一个嵌入式数据库.所以我去寻找一个光滑,快速的"可嵌入"数据库,并且偶然发现了SQLite.
我用它创建了一个数据库,然后用Visual Studio 2008创建了一个静态库项目.库项目将用于另一个主项目.
在库项目中,我DBClass
用方法创建了一个类AddFeedToDB(CFeed f)
.库项目使用.lib
codeproject(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
我错过了什么?
我知道这个问题已经有2年了...但我在这里遇到了同样的情况.添加了所有头文件...添加了lib目录..并继续出现此错误.所以我手动将lib添加到配置属性 - >链接器 - >输入 - >有条件的依赖关系,这一切都适合我.
它发生在我身上不止一次,我认为符号XXX
(即?close@CppSQLite3DB@@QAEXXZ
)是在导入库,而实际符号为__impXXX
(即__imp?close@CppSQLite3DB@@QAEXXZ
).
然后在编译步骤中找到链接器错误的原因:编译器将生成?close@CppSQLite3DB@@QAEXXZ
要导入的符号,它应该在哪里生成__imp?close@CppSQLite3DB@@QAEXXZ
.这通常意味着函数声明本身没有__declspec( dllimport )
.这可能是由某些预处理器符号未定义引起的.或者__declspec
根本不存在......
不知道是不是你的情况,但imp前缀可能意味着你正在Win32项目中编译x64库.