代码之家  ›  专栏  ›  技术社区  ›  Kumar Roshan Mehta

本地头文件在项目中可用,但make不提供此类文件或目录错误

  •  3
  • Kumar Roshan Mehta  · 技术社区  · 7 年前

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

    项目结构:

    enter image description here enter image description here

    3 回复  |  直到 7 年前
        1
  •  4
  •   Michael Kirsche    7 年前

    据我所知,Oversim是在OMNeT 3.x和4.2以及旧版本INET中发布的。 这些旧版本使用了如下参数 --deep

    较新的INET和OMNeT版本对包含文件使用分层路径设置。必须为编译器提供完整的路径才能访问包含的文件。

    #include "inet/common/INETDefs.h"

    Oversim不包括包含的头的完整路径,这就是为什么在较新的OMNeT版本中使用Oversim时会出现错误。

    第一种选择是使用较旧的OMNeT版本。如果你喜欢的话,可以在你的系统上并行安装一个旧的GCC,或者用一个旧的Ubuntu设置一个虚拟机。

    第二个(也是更复杂的)选项是采用所有包含路径或通过 -I

    坦率地说,我建议使用较旧的OMNeT++4.2.2版本。。。

        2
  •  0
  •   Daniel    7 年前

    这个 #include 指令首先在与包含指令的文件相同的目录中搜索,然后在标准系统目录的预配置列表中搜索。

    如果不想将头文件移动到与 EtherAppCli.cc
    -Ipath/to/dir
    我不确定这是否是应用程序your'e编译的目的,但这或多或少是你可以做的。
    查看是否遗漏了安装指南中的任何内容。

        3
  •  0
  •   Truc D T Nguyen    6 年前