在omnet++中编译继承INET EtherTrafGen类的简单模块时如何修复重复符号错误?

问题描述 投票:0回答:2

我尝试在omnet++中制作自己的流量生成器模块继承INET EtherTrafGen, 只会导致重复符号错误。我不明白原因。 以下是编译错误消息。

..
Creating executable: ../out/clang-release/src/hdc.exe
lld-link: error: duplicate symbol: inet::OperationalMixin<omnetpp::cSimpleModule>::isUp() const
>>> defined at ../out/clang-release/src/TrafGen.o
>>> defined at libINET.dll

lld-link: error: duplicate symbol: inet::OperationalMixin<omnetpp::cSimpleModule>::isDown() const
>>> defined at ../out/clang-release/src/TrafGen.o
>>> defined at libINET.dll
clang++: error: linker command failed with exit code 1 (use -v to see invocation

..

对应的头文件,即TrafGen.h是

    #include "inet/applications/ethernet/EtherTrafGen.h"

namespace inet {


//class TrafGen : public cSimpleModule ----> In this case, no compile error
class TrafGen : public EtherTrafGen
{

protected:
    virtual void initialize() override;
    virtual void handleMessage(cMessage *msg) override;

};

}

对应的TrafGen.cc文件是

#include "TrafGen.h"

namespace inet {


Define_Module(TrafGen);

void TrafGen::initialize()
{
    if (strcmp("hostA", getName()) == 0) {
            cMessage *msg = new cMessage("hdcMsg");
            send(msg, "out");
    }
}


void TrafGen::handleMessage(cMessage *msg)
{

    send(msg, "out"); // send out the message

}

}

TrafGen.ned 是

import inet.applications.ethernet.EtherTrafGen;

simple TrafGen extends EtherTrafGen
{
    parameters:
        @class(inet::TrafGen);

}

顺便说一句,当 TrafGen.h 中 TrafGen 的定义中使用 TrafGen: public 'cSimpleModule' 代替 'EtherTrafGen' 时,不会出现编译错误(重复符号错误)。

omnet++ inet
2个回答
0
投票

我将configure.user文件的PREFER_CLANG更改为“no”。现在看来不会出现重复符号错误了。


0
投票

你解决了吗?我也遇到同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.