从一整天开始,我都在尝试安装 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/

项目结构:

c++ - 项目中可用的本地头文件,但 make 给出 No such file or directory 错误-LMLPHP
c++ - 项目中可用的本地头文件,但 make 给出 No such file or directory 错误-LMLPHP

我该如何解决这个构建错误?

最佳答案

这是较新的 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/

10-12 00:33