You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OMNET++ 6.0.2编译报错:无法找到INET 4.5.2依赖库求解决及参考项目

问题:OMNeT++项目编译时无法找到INET依赖库

使用OMNeT++ 6.0.2、INET 4.5.2开发基于Time Flood协议的时间同步项目,拓扑为三角形结构,编译时始终提示无法找到INET依赖库,项目相关文件如下:

.ini配置文件

network = src.TriangleNetwork

# Simulation settings
**.wlan[*].mac.useAck = true
**.wlan[*].mac.retryLimit = 7
**.wlan[*].radio.transmitter.power = 2mW
**.wlan[*].radio.receiver.sensitivity = -85dBm

# PHY layer settings
**.wlan[*].radio.typename = "Ieee80211Radio"
**.wlan[*].mac.typename = "Ieee80211Mac"
**.wlan[*].mgmt.typename = "Ieee80211MgmtAdhoc"

# Mobility
*.node*.mobility.typename = "StaticMobility"

# Position settings
*.node[0].mobility.initialX = 100m
*.node[0].mobility.initialY = 300m
*.node[1].mobility.initialX = 400m
*.node[1].mobility.initialY = 300m
*.node[2].mobility.initialX = 250m
*.node[2].mobility.initialY = 500m

# Simulation time limit
sim-time-limit = 100s

.ned拓扑文件

package src;
import inet.node.inet.StandardHost;
import inet.physicallayer.wireless.ieee80211.packetlevel.Ieee80211ScalarRadioMedium;
import inet.mobility.static.StationaryMobility;

channel Link extends ned.DatarateChannel {
    datarate = 100Mbps;
    delay = 1ms; // Fixed delay
}

network TriangleNetwork {
    parameters:
        int initiator = default(0); // Set the initiator node index
        @display("bgb=500,500");

    submodules:
        radioMedium: Ieee80211ScalarRadioMedium {
            @display("p=250,250");
        }
        node[0]: StandardHost {
            parameters:
                numWlanInterfaces = 1;
                @display("p=100,300;i=device/laptop");
                wlan[0].typename = "Ieee80211Nic";
                mobility.typename = "StaticMobility";
        }
        node[1]: StandardHost {
            parameters:
                numWlanInterfaces = 1;
                @display("p=400,300;i=device/laptop");
                wlan[0].typename = "Ieee80211Nic";
                mobility.typename = "StaticMobility";
        }
        node[2]: StandardHost {
            parameters:
                numWlanInterfaces = 1;
                @display("p=250,500;i=device/laptop");
                wlan[0].typename = "Ieee80211Nic";
                mobility.typename = "StaticMobility";
        }

    connections:
        node[0].wlan[0].radioIn <-- radioMedium.medium;
        node[0].wlan[0].radioOut --> radioMedium.medium;
        node[1].wlan[0].radioIn <-- radioMedium.medium;
        node[1].wlan[0].radioOut --> radioMedium.medium;
        node[2].wlan[0].radioIn <-- radioMedium.medium;
        node[2].wlan[0].radioOut --> radioMedium.medium;

        node[0].wlan[0].mac <--> Link <--> node[1].wlan[0].mac;
        node[1].wlan[0].mac <--> Link <--> node[2].wlan[0].mac;
        node[2].wlan[0].mac <--> Link <--> node[0].wlan[0].mac;
}

Makefile文件

#
# OMNeT++/OMNEST Makefile for Syn
#
# This file was generated with the command:
#  opp_makemake -f --deep -KINET_PROJ=../../inet -DINET_IMPORT -I../inet/src -I$$\(INET_PROJ\)/src -I$$\(INET_PROJ\)/src -L$$\(INET_PROJ\)/src -L$$\(INET_PROJ\)/src -linet -lINET$$\(D\) -- ../inet/src
#

# Name of target to be created (-o option)
TARGET_DIR = .
TARGET_NAME = Syn$(D)
TARGET = $(TARGET_NAME)$(EXE_SUFFIX)
TARGET_IMPLIB = $(TARGET_NAME)$(IMPLIB_SUFFIX)
TARGET_IMPDEF = $(TARGET_NAME)$(IMPDEF_SUFFIX)
TARGET_FILES = $(TARGET_DIR)/$(TARGET)

# User interface (uncomment one) (-u option)
USERIF_LIBS = $(ALL_ENV_LIBS) # that is, $(QTENV_LIBS) $(CMDENV_LIBS)
#USERIF_LIBS = $(CMDENV_LIBS)
#USERIF_LIBS = $(QTENV_LIBS)

# C++ include paths (with -I)
INCLUDE_PATH = -I../inet/src -I$(INET_PROJ)/src -I$(INET_PROJ)/src

# Additional object and library files to link with
EXTRA_OBJS = ../inet/src

# Additional libraries (-L, -l options)
LIBS = $(LDFLAG_LIBPATH)$(INET_PROJ)/src $(LDFLAG_LIBPATH)$(INET_PROJ)/src  -linet -lINET$(D)

# Output directory
PROJECT_OUTPUT_DIR = ../out
PROJECTRELATIVE_PATH = src
O = $(PROJECT_OUTPUT_DIR)/$(CONFIGNAME)/$(PROJECTRELATIVE_PATH)

# Object files for local .cc, .msg and .sm files
OBJS = $O/Adjust/ClockSyncApp.o $O/FTSP/FtspModule.o

# Message files
MSGFILES =

# SM files
SMFILES =

# Other makefile variables (-K)
INET_PROJ=../../inet

#------------------------------------------------------------------------------

# Pull in OMNeT++ configuration (Makefile.inc)

ifneq ("$(OMNETPP_CONFIGFILE)","")
CONFIGFILE = $(OMNETPP_CONFIGFILE)
else
CONFIGFILE = $(shell opp_configfilepath)
endif

ifeq ("$(wildcard $(CONFIGFILE))","" )
$(error Config file '$(CONFIGFILE)' does not exist -- add the OMNeT++ bin directory to the path so that opp_configfilepath can be found, or set the OMNETPP_CONFIGFILE variable to point to Makefile.inc)
endif

include $(CONFIGFILE)

# Simulation kernel and user interface libraries
OMNETPP_LIBS = $(OPPMAIN_LIB) $(USERIF_LIBS) $(KERNEL_LIBS) $(SYS_LIBS)
ifneq ($(PLATFORM),win32)
LIBS += -Wl,-rpath,$(abspath $(INET_PROJ)/src) -Wl,-rpath,$(abspath $(INET_PROJ)/src)
endif

COPTS = $(CFLAGS) $(IMPORT_DEFINES) -DINET_IMPORT $(INCLUDE_PATH) -I$(OMNETPP_INCL_DIR)
MSGCOPTS = $(INCLUDE_PATH)
SMCOPTS =

# we want to recompile everything if COPTS changes,
# so we store COPTS into $COPTS_FILE (if COPTS has changed since last build)
# and make the object files depend on it
COPTS_FILE = $O/.last-copts
ifneq ("$(COPTS)","$(shell cat $(COPTS_FILE) 2>/dev/null || echo '')")
  $(shell $(MKPATH) "$O")
  $(file >$(COPTS_FILE),$(COPTS))
endif

#------------------------------------------------------------------------------
# User-supplied makefile fragment(s)
-include makefrag

#------------------------------------------------------------------------------

# Main target
all: $(TARGET_FILES)

$(TARGET_DIR)/% :: $O/%
    @mkdir -p $(TARGET_DIR)
    $(Q)$(LN) $< $@
ifeq ($(TOOLCHAIN_NAME),clang-msabi)
    -$(Q)-$(LN) $(<:%.dll=%.lib) $(@:%.dll=%.lib) 2>/dev/null

$O/$(TARGET_NAME).pdb: $O/$(TARGET)
endif

$O/$(TARGET): $(OBJS)  $(wildcard $(EXTRA_OBJS)) Makefile $(CONFIGFILE)
    @$(MKPATH) $O
    @echo Creating executable: $@
    $(Q)$(CXX) $(LDFLAGS) -o $O/$(TARGET) $(OBJS) $(EXTRA_OBJS) $(AS_NEEDED_OFF) $(WHOLE_ARCHIVE_ON) $(LIBS) $(WHOLE_ARCHIVE_OFF) $(OMNETPP_LIBS)

.PHONY: all clean cleanall depend msgheaders smheaders

# disabling all implicit rules
.SUFFIXES :
.PRECIOUS : %_m.h %_m.cc

$O/%.o: %.cc $(COPTS_FILE) | msgheaders smheaders
    @$(MKPATH) $(dir $@)
    $(qecho) "$<"
    $(Q)$(CXX) -c $(CXXFLAGS) $(COPTS) -o $@ $<

%_m.cc %_m.h: %.msg
    $(qecho) MSGC: $<
    $(Q)$(MSGC) -s _m.cc -MD -MP -MF $O/$(basename $<)_m.h.d $(MSGCOPTS) $?

%_sm.cc %_sm.h: %.sm
    $(qecho) SMC: $<
    $(Q)$(SMC) -c++ -suffix cc $(SMCOPTS) $?

msgheaders: $(MSGFILES:.msg=_m.h)

smheaders: $(SMFILES:.sm=_sm.h)

clean:
    $(qecho) Cleaning $(TARGET)
    $(Q)-rm -rf $O
    $(Q)-rm -f $(TARGET_FILES)
    $(Q)-rm -f $(call opp_rwildcard, . , *_m.cc *_m.h *_sm.cc *_sm.h)

cleanall:
    $(Q)$(CLEANALL_COMMAND)
    $(Q)-rm -rf $(PROJECT_OUTPUT_DIR)

help:
    @echo "$$HELP_SYNOPSYS"
    @echo "$$HELP_TARGETS"
    @echo "$$HELP_VARIABLES"
    @echo "$$HELP_EXAMPLES"

# include all dependencies
-include $(OBJS:%=%.d) $(MSGFILES:%.msg=$O/%_m.h.d)
解决步骤
  • 确保INET库已正确编译:进入INET 4.5.2目录,执行make clean && make all,确认编译完成后生成的库文件(如libinet.so/inet.lib)存在于inet/src目录下。
  • 修正Makefile路径与配置:
    • 检查INET_PROJ=../../inet是否匹配实际目录结构,若项目与INET的层级关系不符,调整为正确的相对/绝对路径(例如项目在projects/Syn、INET在projects/inet时,改为INET_PROJ=../inet)。
    • 移除重复路径配置,简化为:
      INCLUDE_PATH = -I$(INET_PROJ)/src
      LIBS = $(LDFLAG_LIBPATH)$(INET_PROJ)/src -linet -lINET$(D)
      
    • 删除错误的EXTRA_OBJS = ../inet/src配置,无需将INET源码目录作为对象文件链接。
  • 重新生成Makefile:删除现有Makefile,在项目根目录执行正确的生成命令:
    opp_makemake -f --deep -KINET_PROJ=../inet -DINET_IMPORT -I$(INET_PROJ)/src -L$(INET_PROJ)/src -linet
    
  • 验证环境与重新编译:确认OMNeT++的bin目录已加入系统PATH,执行echo $INET_PROJ验证路径正确,最后执行make clean && make all重新编译。
基于OMNeT++的Flood类时间同步开源项目参考
  • FTSP(Flooding Time Synchronization Protocol)实现:部分开源项目基于OMNeT++实现FTSP,核心通过广播同步包完成全网时间同步,可学习其包封装、时钟调整逻辑。
  • RBS(Reference Broadcast Synchronization)模拟:RBS依赖广播参考包实现节点间同步,部分OMNeT++示例项目包含该协议的基础实现,可参考其Flood式消息分发机制。
  • INET框架自带同步模块:INET中包含ClockSynchronizer等基础模块,可基于这些模块扩展实现自定义的Flood时间同步逻辑。

内容的提问来源于stack exchange,提问作者duo chen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 03:15:54