include errors detected cannot open source file glib.h glib.h glibconfig.h no such file or directory

最近写网安作业,要用到libvmi,发现打开源码缺失库glib。

cannot open source file glib.h

发现要先安装glib。

sudo apt-get install libglib2.0-dev

之后使用

g++ -v -E -x c++ -

会输出g++ 需要include的所有路径。如下。

wang-an@ubuntu:~/libvmi/examples$ g++ -v -E -x c++ -
Using built-in specs.
COLLECT_GCC=g++
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 5.4.0-6ubuntu1~16.04.12' --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12) 
COLLECT_GCC_OPTIONS='-v' '-E' '-shared-libgcc' '-mtune=generic' '-march=x86-64'
 /usr/lib/gcc/x86_64-linux-gnu/5/cc1plus -E -quiet -v -imultiarch x86_64-linux-gnu -D_GNU_SOURCE - -mtune=generic -march=x86-64 -fstack-protector-strong -Wformat -Wformat-security
ignoring duplicate directory "/usr/include/x86_64-linux-gnu/c++/5"
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/5/../../../../x86_64-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/5
 /usr/include/x86_64-linux-gnu/c++/5
 /usr/include/c++/5/backward
 /usr/lib/gcc/x86_64-linux-gnu/5/include
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/5/include-fixed
 /usr/include/x86_64-linux-gnu
 /usr/include
End of search list.

在vscode里面按F1,输入json,选择C/C++那个,将/usr这几个目录全部复制到include path这里,像这样。

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "/usr/include",
                "${workspaceFolder}/**",
                "/usr/include/c++/5",
                "/usr/include/x86_64-linux-gnu/c++/5",
                "/usr/include/c++/5/backward",
                "/usr/lib/gcc/x86_64-linux-gnu/5/include",
                "/usr/local/include",
                "/usr/lib/gcc/x86_64-linux-gnu/5/include-fixed",
                "/usr/include/x86_64-linux-gnu",
                "/usr/include/glib-2.0",
                "/usr/lib/x86_64-linux-gnu/glib-2.0/include"
            ],
            "defines": [],
            "compilerPath": "/usr/bin/g++-5",
            "cStandard": "gnu11",
            "cppStandard": "c++17",
            "intelliSenseMode": "gcc-x64"
        }
    ],
    "version": 4
}

重启vscode,这就解决了大部分include errors detected的问题。

至于glib.h, find发现它在/usr/include/glib-2.0,也加进json文件includepath里。

重启后,发现还是有下面这个错误。显示没有glibconfig.h。

glibconfig.h no such file or directory

再次用find,

sudo find / -name glibconfig.h

输出如下

wang-an@ubuntu:~/Desktop$ sudo find / -name glibconfig.h
/usr/lib/x86_64-linux-gnu/glib-2.0/include/glibconfig.h
find: ‘/run/user/1000/gvfs’: Permission denied

那再把/usr/lib/x86_64-linux-gnu/glib-2.0/include添加进includepath,重启,不报错了。

### 问题分析 当遇到 `fatal error: main.h: No such file or directory` 的编译错误时,通常是因为编译器无法找到指定的头文件。这可能是由于以下几个原因之一: 1. 头文件确实不存在于项目的任何位置。 2. 文件存在但未正确配置编译器的 **include 路径**。 3. 使用了不兼容的开发环境或工具链。 以下是针对该问题的具体解决方案以及可能涉及的操作步骤说明。 --- ### 解决方案 #### 方法一:确认头文件是否存在 首先需要验证 `main.h` 是否存在于项目中或其他已知路径下。如果文件缺失,则需手动获取并放置到合适的位置。例如,在某些情况下可以从官方文档、开源库或者第三方资源下载所需的 `.h` 文件[^1]。 #### 方法二:设置正确的 Include 路径 假设已经拥有 `main.h` 文件,接下来要做的就是告诉编译器在哪里可以找到它。可以通过以下方式调整 include 路径: ##### 对于 GCC/G++ 用户 (Linux/MacOS/Windows WSL) 在命令行调用 g++ 或 gcc 进行编译时,可利用 `-I` 参数来添加额外的搜索目录。例如: ```bash g++ -o myprogram main.cpp -I/path/to/include/ ``` 上述指令会指示编译器查找 `/path/to/include/` 下的所有头文件[^4]。 ##### 配置 IDE 中的 Include Path 如果是通过集成开发环境(IDE),比如 Visual Studio Code, CLion 等构建程序的话,则应该修改对应项目的配置选项以加入自定义 include path: - **VSCode with PlatformIO**: 打开平台管理插件 settings.json 并补充如下字段: ```json { "platformio.ini": { "build_flags": [ "-I${workspace_dir}/libs" ] } } ``` 此处 `${workspace_dir}` 表达当前工作区根目录;而 libs 子文件夹即为目标存放 header files 地址[^2]. - **CLion / CMakeLists.txt** 如果采用 cmake 构建体系结构,那么可以在 CMakeLists.txt 添加一行代码设定新的 include directories 如此所示: ```cmake target_include_directories(my_target PRIVATE ${CMAKE_SOURCE_DIR}/headers/) ``` #### 方法三:安装必要的依赖包 有时特定头文件属于某个系统级库的一部分,因此必须先完成相应软件包的安装才能正常使用这些功能模块。举个例子来说,假如目标环境中缺少 OpenGL 支持组件(`<GL/glut.h>`), 则可通过执行下面这条 Linux 命令解决问题: ```bash sudo apt-get update && sudo apt-get install freeglut3-dev mesa-common-dev libglu1-mesa-dev ``` 同样道理适用于其他类型的外部扩展库情况。 --- ### 总结 综上所述,处理此类 fatal errors 关键在于定位丢失 headers 的实际原因,并采取适当措施恢复其可用状态。无论是重新引入原始 sources ,还是修正 build scripts 来反映最新布局更改都是可行的办法之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值