继承omnet++ INET类的简单模块出现重复符号构建错误的原因是什么?

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

我正在使用 omnet++ 6.0 和 INET 4.3 以及 gcc 编译器。我尝试创建一个继承 INET 类的简单模块,如下所示,导致在构建时出现重复的符号错误。我不知道为什么。代码尽可能简单,只是为了揭示构建错误。该方法是否缺少任何关键内容?

在 .cc 文件中添加 Define_Module() 时,会出现重复符号构建错误。构建错误信息部分如下:

../../inet4.3/src/inet/common/packet/tag/SharingRegionTagSet.h:318:55: warning: 'const inet::SharingRegionTagSet::RegionTag<inet::TagBase>& inet::SharingRegionTagSet::getRegionTag(int) const' redeclared without dllimport attribute after being referenced with dll linkage
  318 | inline const SharingRegionTagSet::RegionTag<TagBase>& SharingRegionTagSet::getRegionTag(int index) const
      |                                                       ^~~~~~~~~~~~~~~~~~~
../../inet4.3/src/inet/common/packet/tag/SharingRegionTagSet.h:323:54: warning: 'const inet::SharingRegionTagSet::RegionTag<inet::TagBase> inet::SharingRegionTagSet::getRegionTagForUpdate(int)' redeclared without dllimport attribute after being referenced with dll linkage
  323 | inline const SharingRegionTagSet::RegionTag<TagBase> SharingRegionTagSet::getRegionTagForUpdate(int index)
      |                                                      ^~~~~~~~~~~~~~~~~~~
Creating executable: ../out/gcc-release/src/hdc.exe
lld-link: error: duplicate symbol: virtual thunk to inet::queueing::PacketFilterBase::getConsumer(omnetpp::cGate*)
>>> defined at ../out/gcc-release/src/my8021qTagEpdHeaderChecker.o
>>> defined at libINET.dll

对应的ned文件“my8021qTagEpdHeaderChecker.ned”是..

import inet.linklayer.ieee8021q.Ieee8021qTagEpdHeaderChecker;

simple my8021qTagEpdHeaderChecker extends Ieee8021qTagEpdHeaderChecker //like IIeee8021qTagEpdHeaderChecker
{
    parameters:
        
        @class(inet::my8021qTagEpdHeaderChecker);
        @display("i=block/checker");   
    
}

头文件“my8021qTagEpdHeaderChecker.h”是

#include "inet/linklayer/ieee8021q/Ieee8021qTagEpdHeaderChecker.h"

namespace inet {

class my8021qTagEpdHeaderChecker : public Ieee8021qTagEpdHeaderChecker
{

protected:
 //   virtual void processPacket(Packet *packet) override;
};

} // namespace inet

.cc 文件“my8021qTagEpdHeaderChecker.cc”制作为

#include "my8021qTagEpdHeaderChecker.h"

namespace inet {

Define_Module(my8021qTagEpdHeaderChecker);


}
omnet++ inet
2个回答
0
投票

这可能是文件或 INET 中头文件的排序问题。尝试将 INETDefs.h 文件作为第一个包含在所有头文件中。


0
投票

你可以试试这个:静态链接方式的inet。

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