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

标签 c++ makefile build gnu-make omnet++

一整天我都在尝试安装 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,因为 omnet4.2.2 在 Ubuntu16.04 上不受支持,我的 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

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

最佳答案

这是较新的 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 不包括所包含 header 的完整路径,这就是为什么在较新的 OMNeT 版本中使用 Oversim 时出现错误的原因。

第一个选项是使用较旧的 OMNeT 版本。如果愿意,可以在您的系统上并行安装较旧的 GCC,或者使用较旧的 Ubuntu 设置虚拟机。

第二个(也是更复杂的)选项是采用所有包含路径或通过编译器/链接器的 -I 选项定义所有必要的路径。

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

关于c++ - 项目中可用的本地头文件,但 make 给出 No such file or directory 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45112694/

相关文章:

c++ - 如何开始使用 Android Studio C++ 开发

c# - 如何在 c# 中的内存中直接一个接一个地创建结构?

makefile - 在 Debian 上安装 nullfs

maven - JanusGraph 构建失败(TinkerPop 3.2.4)

windows-7 - Windows7 中的 "gdb.exe has stopped working "

c++ - QLibraryInfo 似乎没有加载 qt.conf

c++ - 构造函数右括号处的无法访问的代码

linux - 调试 make 和 cmake?

makefile - 生成文件中缺少 MACHTYPE

android - 52个 Unresolved 类和引用