用户定义的dll引用另一个用户定义的dll时发生链接器错误

Linker error when user defined dll is refering another userdefined dll

本文关键字:用户 dll 定义 链接 错误 另一个 引用      更新时间:2023-10-16

我试图使用协议层设计模式来实现协议堆栈:http://www.eventhelix.com/realtimemantra/patterncatalog/protocol_layer.htm

在我们的项目中,我将所有层都作为单独的dll。我拥有的层是:

  1. 应用层dll

  2. LLC层dll

  3. MAC层dll

  4. 物理层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. 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?我明白了,你只面临链接器的问题。要么你的链接顺序不对,要么一定是出了什么问题。试着按照正确的顺序将它们连接起来。这应该能解决问题。如果没有,请提供更多信息。