用户定义的dll引用另一个用户定义的dll时发生链接器错误
Linker error when user defined dll is refering another userdefined dll
我试图使用协议层设计模式来实现协议堆栈:http://www.eventhelix.com/realtimemantra/patterncatalog/protocol_layer.htm
在我们的项目中,我将所有层都作为单独的dll。我拥有的层是:
-
应用层dll
-
LLC层dll
-
MAC层dll
-
物理层dll
我在同一解决方案中有另一个项目,它实现了设计模式和具有协议层的通用功能的实现。我的所有层都继承自Protocol Layer基类。之间的依赖关系项目如下:协议层设计模式dll:无依赖关系物理层dll:协议设计模式dllMAC层dll:协议设计模式dll和物理层dllLLC层dll:协议设计模式dll和MAC层dll应用层dll:协议设计模式dll和LLC层dll
根据设计模式,我们的每个层都有指向其上下层的指针。我们设计的流程是这样的:在应用层构造函数中,我们创建一个LLC层然后LLC层创建Mac层,Mac层inturn创建物理层。它们都有关联使用指针。
我的协议设计模式项目dll和物理层dll构建正确。但其他dll构建正在提供链接器错误。对底层的构造函数说未解析的外部。这些是我犯的错误。
====================================
- 1> phLayer.obj:错误LNK2019:未解析的外部符号"public:
虚拟__thiscall CProtocolLayer::~ CProtocol Layer(void)"
(??1协议层@@UAE@XZ)在函数中引用
__undfunclet$??0CPhysicalLayer@@QAE@PAVCProtocolLayer@@@Z$01>phLayer.obj:错误LNK2019:未解析的外部符号"public:
__thiscall CReceiveProtocolHandler::CReceiveProtocolHandler(类CProtocolLayer*)"
(??0CReceiveProtocolHandler@@QAE@PAVCProtocolLayer@@@Z) 被引用的在函数"public:__thiscall"中CPhysicalLayer::CPhysical Layer(类别CProtocolLayer*)"(?0CPhysicalLayer@@QAE@PAVCProtocolLayer@@@Z) 1>phLayer.obj:错误LNK2019:未解析的外部符号"public:__thiscallCTransmitProtocol处理程序:CTransmitProxy处理程序(类CProtocolLayer*)"
(??0CTransmitProtocolHandler@@QAE@PAVCProtocolLayer@@@Z) 被引用的在函数"public:__thiscall CPhysicalLayer::CPhysical Layer(类CProtocolLayer*)"(?0CPhysicalLayer@@QAE@PAVCProtocolLayer@@@Z)
1> phLayer.obj:错误LNK2019:未解析的外部符号"public:
__thiscall CProtocolLayer::CProtocol Layer(类CProtocol.Layer*,类CProtcolLayer*)"(??0CProtocolLayer@@QAE@PAV0@0@Z)在函数"public:__thiscall
中引用CPhysicalLayer::CPhysical Layer(类CProtocolLayer*)"
(?0CPhysicalLayer@@QAE@PAVCProtocolLayer@@@Z) 1>phLayer.obj:错误LNK2019:未解析的外部符号"public:int__thiscall"
CProtocolPacket::getBodyLength(void)"
(?getBodyLength@CProtocolPacket@@QAEHXZ)在函数中引用
"public:virtual void __thiscall CPhysicalLayer::Data_req(类
CProtocolPacket*)"
(?Data_req@CPhysicalLayer@@UAEXPAVCProtocolPacket@@@Z)1>phLayer.obj:错误LNK2019:未解析的外部符号"public:void __thiscallCReceiveProtocolHandler::Handle_Receive(类CProtocolPacket*)"
(?Handle_Receive@CReceiveProtocolHandler@@QAEXPAVC协议包@@@Z)在函数"private:void __thiscall"中引用
CPhysicalLayer::dataRead(void)"(?dataRead@CPhysicalLayer@@AAEXXZ)
1> phLayer.obj:错误LNK2019:未解析的外部符号"public:
void __thiscall CProtocolPacket::AddTrailer(int,char*)"
(?AddTrailer@CProtocolPacket@@QAEXHPAD@Z)在函数中引用
"private:class CProtocolPacket__thiscall
CPhysicalLayer::convertToProtocolPacket(类
std::basic_string,类
std::allocater>)"
(?convertToProtocolPacket@CPhysicalLayer@@啊?AVC协议包@@V$basic_string@DU$char_traits@D@std@@V$allocator@D@2@@std@@@Z)1> phLayer.obj:错误LNK2019:未解析的外部符号"public:
void __thiscall CProtocolPacket::AddHeader(int,char*)"
(?AddHeader@CProtocolPacket@@QAEXHPAD@Z)在函数中引用
"private:class CProtocolPacket__thiscall
CPhysicalLayer::convertToProtocolPacket(类
std::basic_string,类
std::allocater>)"
(?convertToProtocolPacket@CPhysicalLayer@@啊?AVC协议包@@V$basic_string@DU$char_traits@D@std@@V$allocator@D@2@@std@@@Z)
如何构建exe?我明白了,你只面临链接器的问题。要么你的链接顺序不对,要么一定是出了什么问题。试着按照正确的顺序将它们连接起来。这应该能解决问题。如果没有,请提供更多信息。
相关文章:
- 挂起和取消挂起一个文件DLL
- C++如何通过用户输入删除列表元素
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- 如何使用用户输入在C++中正确填充2D数组
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- C++MySQL C api用户输入行
- 导入库可以跨dll版本工作吗
- 从C++dll访问C#中的一行主要参数
- 链接到自行创建的dll失败
- 使用用户定义函数的字符串反转
- 用户定义函数中的指针和输入
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 用户DLL/EXE中的堆分配失败
- 如何在同一系统中为不同的用户帐户注册相同的COM dll
- 外壳扩展DLL-如果用户在文件夹空白区域内单击,如何捕获文件夹路径
- 您是否可以拥有一个具有管理员权限的DLL,该DLL从仅具有用户级权限的客户端应用程序链接
- 用户定义的dll引用另一个用户定义的dll时发生链接器错误
- 如何将库合并到可执行文件中,以便用户不需要 DLL?
- 当UDF调用基于另一个UDF的输出时,Excel在用户定义的DLL上崩溃
- DLL new/delete是否覆盖用户代码new/delete