使用freetype2头时cmake出错的原因是什么?

使用freetype2头时cmake出错的原因是什么?

我建立一个简单的格莱夫高兴的项目在 vs code 上成功运行。我的问题是。我将 <freetype2/ft2build.h> 标头添加到我的项目中,然后在项目文件夹中执行以下命令:

sudo su
cd build
cmake ..
make

正常情况下,它不会出现错误。

我收到错误:

    In file included from /home/gomi/Documents/ubuntuProject/main.c:3:
    /usr/include/freetype2/ft2build.h:39:10: fatal error: freetype/config/ftheader.h: No such file or directory
       39 | #include <freetype/config/ftheader.h>
          |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~compilation terminated.

我从终端进入 usr/include/freetype2 路径。如果我没记错的话,我只在目录中看到 ft2build.h,没有其他配置文件夹。我下载了 freetype2 文件,并将 freetype 文件夹复制到此目录,但出现了同样的错误。最后我删除了复制的 freetype 文件夹。我不确定它们是否已经在那里,我损坏了 freetype2。

我该做什么 ?

答案1

正如我所说的,您不应该以 root 身份运行cmakemake但这似乎是另一个问题。

对于您的问题,请先删除您手动添加的文件。然后,您可以安装以下软件包来修复该问题:

sudo apt update
sudo apt install --reinstall libfreetype6-dev

您可以使用命令来找到这样的文件apt-file

sudo apt update
sudo apt install apt-file
sudo apt-file update
apt-file search ftheader.h

这将返回哪个包包含您需要的文件。

笔记: 在 20.04 上,包含该文件的包是,libfreetype-dev但是,该包是的依赖项,libfreetype6-dev因此它应该全部以相同的方式工作。

此外,显示的路径与第 39 行中针对该文件的工作目录apt-file请求的路径相同/usr/include/freetype2/ft2build.h。因此,您不必告诉cmake在哪里查找此文件,也不必将副本放在/usr/include/freetype2

答案2

经过几个小时的搜索,我想我找到了。首先,除非您告诉 cmake,否则它会尝试在错误的目录中搜索它。

我在这个页面上找到了它:https://techoverflow.net/2019/06/11/how-to-fix-ft2build-h-no-such-file-or-directory/

  1. 我刚刚添加到 vs code 的包含目录中/usr/include/freetype2

  2. 我将标题#include <ft2build.h>及其FT_FREETYPE_H后面的内容放入我的main.c文件中。

  3. 我使用pkg-config --cflags freetype2命令来确认它的位置-I/usr/include/freetype2

  4. 我进入CMakeLists.txt文件然后添加了include_directories (/usr/include/freetype2)行。最终的 CMakeLists.txt 文件如下所示:

    cmake_minimum_required(VERSION 3.20.3)
    
    project(gomi)
    
    include_directories (/usr/include/freetype2)
    
    add_executable(${PROJECT_NAME} glad.c main.c)
    
    target_link_libraries(${PROJECT_NAME} GL dl glfw)
    
  5. 我的重建命令是:

    cd ../            # one path pack from build folder)
    rm -r build/*     # delete all files in build)
    cd build
    cmake ..
    make
    ./myprogramname   # runs
    

相关内容