Рейтинг:0

В чем причина ошибки cmake при использовании заголовка freetype2?

флаг pr

Я строю простой glfw, радостный проект по сравнению с кодом успешно. Моя проблема в том. Я добавляю заголовок <freetype2/ft2build.h> в свой проект и выполняю эти команды в папке проекта:

судо су
сборка компакт-диска
сделай ..
делать

обычно это работает без ошибок.

Я получаю сообщение об ошибке:

    В файле из /home/gomi/Documents/ubuntuProject/main.c:3:
    /usr/include/freetype2/ft2build.h:39:10: фатальная ошибка: freetype/config/ftheader.h: нет такого файла или каталога
       39 | #include <freetype/config/ftheader.h>
          | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ компиляция прекращена.

Я пошел по пути usr/include/freetype2 с терминала. Если я правильно помню, я видел только ft2build.h в каталоге и никакой другой папки конфигурации. Я скачал файлы freetype2, скопировал папку freetype в этот каталог и получил ту же ошибку. В конце я удалил скопированную папку freetype. Я не уверен, что они уже были там, и я повредил freetype2.

Что я должен делать ?

Knud Larsen avatar
флаг by
Список файлов 18.04 https://packages.ubuntu.com/bionic/amd64/libfreetype6-dev/filelist .... Список файлов 20.04 https://packages.ubuntu.com/focal/amd64/libfreetype-dev/filelist
mchid avatar
флаг bo
Вы не должны использовать `sudo` или root для `cmake` или `make`.Вам нужно только root-права для установки части процесса. Если вы уже использовали root-права для попытки сборки, лучше всего начать заново, удалить каталог и повторно загрузить исходный код, чтобы начать заново. В качестве альтернативы вы можете попробовать запустить `sudo make clean`, но нет гарантии, что это сработает.
флаг pr
да, вы правы @mchid, я как-то написал, что это защищено от записи, когда я впервые это сделал. В это время я удалил содержимое сборки, а затем перестроил ее. Не становясь root сейчас, что строит. Однако эта странная проблема с заголовком остается.
флаг pr
вот аналогичная проблема: https://stackoverflow.com/questions/34910660/fatal-error-freetype-config-ftheader-h
Рейтинг:0
флаг pr

После часов поиска. Думаю, я нашел это. Во-первых, он пытается искать его в неправильном каталоге, если вы не скажете об этом cmake.

Я нашел это на этой странице: https://techoverflow.net/2019/06/11/how-to-fix-ft2build-h-no-such-file-or-directory/

  1. Я только что добавил в каталоги vs code's include /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 (ВЕРСИЯ 3.20.3)
    
    проект(гоми)
    
    include_directories (/usr/include/freetype2)
    
    add_executable(${PROJECT_NAME} Glad.c main.c)
    
    target_link_libraries(${PROJECT_NAME} GL dl glfw)
    
  5. Мои команды, чтобы перестроить его:

    cd ../ # один пакет путей из папки сборки)
    rm -r build/* # удалить все файлы в сборке)
    сборка компакт-диска
    сделай ..
    делать
    ./myprogramname # запускает
    
флаг hr
Вам, вероятно, следует использовать `find_package`, а затем установить `target_include_directories` с найденным значением `FREETYPE_INCLUDE_DIRS`, вместо того, чтобы жестко кодировать `include_directories (/usr/include/freetype2)` (в этом смысл `cmake` - чтобы находить вещи системно-независимым способом). См., например, [Связывание freetype с cmake] (https://stackoverflow.com/a/23888557/4440445)
флаг pr
@steeldriver Спасибо, я сделал правильные изменения. Я просто не использовал SET(CMAKE_CXX_FLAGS "-O2 -std=c++11"), остальное работает без проблем.
Рейтинг:0
флаг bo

Как я уже сказал, вы не должны бежать cmake и делать как root, но это, похоже, другая проблема.

Что касается вашей проблемы, сначала удалите файл, который вы добавили вручную. Затем вы можете установить следующий пакет, чтобы устранить проблему:

судо подходящее обновление
sudo apt install --переустановить libfreetype6-dev

Вы можете найти такие файлы, используя apt-файл команда.

судо подходящее обновление
sudo apt установить apt-файл
обновление sudo apt-файла
apt-файл поиска ftheader.h

Это вернет, какой пакет содержит нужный вам файл.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.