从一整天开始,我都在尝试安装 OverSim [ http://www.oversim.org/wiki/OverSimInstall]
生成文件如下所示:
all: checkmakefiles
cd src && $(MAKE)
clean: checkmakefiles
cd src && $(MAKE) clean
cleanall: checkmakefiles
cd src && $(MAKE) MODE=release clean
cd src && $(MAKE) MODE=debug clean
rm -f src/Makefile
makefiles:
cd src && opp_makemake -f --deep --make-so -o inet -O out $$NSC_VERSION_DEF
checkmakefiles:
@if [ ! -f src/Makefile ]; then \
echo; \
echo '======================================================================='; \
echo 'src/Makefile does not exist. Please use "make makefiles" to generate it!'; \
echo '======================================================================='; \
echo; \
exit 1; \
fi
doxy:
doxygen doxy.cfg
tcptut:
cd doc/src/tcp && $(MAKE)
我正在使用 Omnet5.1.1,因为 Ubuntu16.04 不支持 omnet4.2.2,我的 gcc 版本是 5.4.1。
每次我尝试构建这个 make all 时,它都会给出头文件未找到错误,而实际上头文件存在于项目目录中。
In file included from applications/ethernet/EtherAppCli.cc:21:0:
applications/ethernet/EtherAppCli.h:21:22: fatal error: INETDefs.h: No such file or directory
包括是这样完成的:
#include "INETDefs.h" //available at src/linklayer/contract/
#include "MACAddress.h" //available at src/base/
项目结构:
我该如何解决这个构建错误?
最佳答案
这是较新的 OMNeT++ 版本 5.x 与较旧的 OMNeT++ 版本 3.x 和 4.x 之间的基本区别。
就我所记得的 Oversim 而言,它是针对 OMNeT 3.x 和 4.2 以及较旧的 INET 版本发布的。
这些旧版本使用 --deep
之类的参数来搜索包含文件,这就是为什么包含文件只是命名而不是输入完整路径的原因。
较新的 INET 和 OMNeT 版本对包含文件使用分层路径设置。必须为编译器提供完整的路径才能访问包含的文件。
因此,对于 INET 3.x 版和 OMNeT++ 5.x 版,包含如下所示: #include "inet/common/INETDefs.h"
Oversim 不包括包含的头文件的完整路径,这就是为什么在较新的 OMNeT 版本中使用 Oversim 时出现错误的原因。
第一个选项是使用较旧的 OMNeT 版本。如果您愿意,可以在您的系统上并行安装较旧的 GCC,或者使用较旧的 Ubuntu 设置虚拟机。
第二个(也是更复杂的)选项是采用所有包含路径或通过编译器/链接器的 -I
选项定义所有必要的路径。
坦率地说,我建议使用较旧的 OMNeT++ 4.2.2 版本...
关于c++ - 项目中可用的本地头文件,但 make 给出 No such file or directory 错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45112694/