隐式 DLL 链接和类内部函数
Implicit DLL linking and class-internal functions
我正在尝试为SQLite编写一个包装类,以便使用隐式链接通过DLL公开,即生成库和头文件供消费者编译和链接。
目前我正在导出包装类,但是当我尝试编译使用此包装类的项目时,我收到链接器错误,说无法解析 sqlite API 调用,例如 sqlite3_open。 包装类和消费者都是C++的,但 sqlite 是 C。
为什么使用者需要知道未公开给它的函数(包装类的全部要点)? 这是否意味着我需要修改 SQLite 标头以更改其函数,以便对所有函数/我正在包装的函数进行适当的_declspec(dllexport)装饰? 此更改还有其他选择吗?
链接器错误:
libsqlite.lib(sqlitewrapper.oxl) : error LNK2019: unresolved external symbol _sq
lite3_close referenced in function "public: virtual __thiscall CSQLiteWrapper::~
CSQLiteWrapper(void)" (??1CSQLiteWrapper@@UAE@XZ)
libsqlite.lib(sqlitewrapper.oxl) : error LNK2019: unresolved external symbol _sq
lite3_open referenced in function "public: __thiscall CSQLiteWrapper::CSQLiteWra
pper(class ATL::CStringT<char,class ATL::StrTraitATL<char,class ATL::ChTraitsCRT
<char> > > const &)" (??0CSQLiteWrapper@@QAE@ABV?$CStringT@DV?$StrTraitATL@DV?$C
hTraitsCRT@D@ATL@@@ATL@@@ATL@@@Z)
libsqlite.lib(sqlitewrapper.oxl) : error LNK2019: unresolved external symbol _sq
lite3_free referenced in function "public: virtual void __thiscall CSQLiteWrappe
r::Exec(class ATL::CStringT<char,class ATL::StrTraitATL<char,class ATL::ChTraits
CRT<char> > > const &,int (__cdecl*)(void *,int,char * *,char * *))" (?Exec@CSQL
iteWrapper@@UAEXABV?$CStringT@DV?$StrTraitATL@DV?$ChTraitsCRT@D@ATL@@@ATL@@@ATL@
@P6AHPAXHPAPAD2@Z@Z)
libsqlite.lib(sqlitewrapper.oxl) : error LNK2019: unresolved external symbol _sq
lite3_exec referenced in function "public: virtual void __thiscall CSQLiteWrappe
r::Exec(class ATL::CStringT<char,class ATL::StrTraitATL<char,class ATL::ChTraits
CRT<char> > > const &,int (__cdecl*)(void *,int,char * *,char * *))" (?Exec@CSQL
iteWrapper@@UAEXABV?$CStringT@DV?$StrTraitATL@DV?$ChTraitsCRT@D@ATL@@@ATL@@@ATL@
@P6AHPAXHPAPAD2@Z@Z)
您是否将包装器与 SQLite 库静态链接? 这样做应该意味着所有内容都位于库中,而不仅仅是一个网关,因此链接器错误应该消失。 当然,这是假设您不想将SQLite库与包装器分开。
我问题的根本原因是我正在使用"lib"命令来生成我当时链接的库。 正如 Ixop 所提到的,在这种情况下,我需要确保将 SQLite 添加到我的库中,即使它没有直接在 DLL 中公开。
但是,对于隐式链接,我应该做的是使用 IMPLIB 链接器指令来生成库。 对我的构建方式进行此更改解决了该问题。
相关文章:
- 内联函数中具有内部链接的全局变量
- 使用C链接在函数内部创建C++模板
- 为什么函数 f4 的名称具有内部链接,而不是 C 语言链接?
- 使用自定义工具集获取动态退出析构函数链接错误 - eh 矢量析构函数
- C++构造函数具有内部链接,但未定义 [-Wundefined-internal]
- C++复制构造函数链接堆栈
- C 将外部函数链接为成员函数
- 将静态类与友元函数链接时出现奇怪错误
- 关于C++中构造函数链接的一些问题
- 构造函数/析构函数链接错误
- 查找导致库函数链接的函数
- C++虚拟覆盖函数链接器错误
- 将错误与定义的析构函数链接
- 类型是否只有内部/外部链接以外的"链接"?
- 模板函数链接器错误LNK2019
- 使用模板的构造函数链接器错误
- Qt移动构造函数链接错误
- 内联函数链接错误C++
- c++ OpenGL——gluBuild2DMipmaps函数链接错误
- 静态空函数链接错误