我尝试在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' 时,不会出现编译错误(重复符号错误)。
我将configure.user文件的PREFER_CLANG更改为“no”。现在看来不会出现重复符号错误了。
你解决了吗?我也遇到同样的问题。