Ошибка при создании приложения C++ с использованием KXmlGuiWindow

Я следил за вводным руководством по использованию KDE Framework и столкнулся с проблемами при компиляции. Код такой же, как в учебнике. Компилятор выводит:

fatal error: KXmlGuiWindow: No such file or directory

Моя первая мысль заключалась в том, что мне просто не хватает пакета, поэтому я использовал поиск apt-cache для поиска kxml и установил libkf5xmlgui-dev. Несмотря на это ошибка сохраняется. Я не мог нигде в Интернете ссылки на эту ошибку. Изменился ли путь импорта? Требуется ли другой пакет?

Я использую Kubuntu 20.04.

Раньше мне приходилось устанавливать другие пакеты для компиляции программы «Hello World», которые еще не включали KXmlGuiWindow, но когда я их установил, все работало нормально.

Редактировать: find /usr -name KXmlGuiWindow дал мне результат /usr/include/KF5/KXmlGui/KXmlGuiWindow. Я использую Atom для своего редактора кода, поэтому я компилирую программу с терминала, выполняя команды, приведенные в учебнике, который cmake .. && make (из каталога сборки в корневом каталоге проекта).

Полный вывод этой команды:

      -- The C compiler identification is GNU 9.3.0
-- The CXX compiler identification is GNU 9.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Installing in the same prefix as Qt, adopting their path scheme.
-- Looking for __GLIBC__
-- Looking for __GLIBC__ - found
-- Performing Test _OFFT_IS_64BIT
-- Performing Test _OFFT_IS_64BIT - Success
-- Performing Test HAVE_DATE_TIME
-- Performing Test HAVE_DATE_TIME - Success
-- Found KF5CoreAddons: /usr/lib/x86_64-linux-gnu/cmake/KF5CoreAddons/KF5CoreAddonsConfig.cmake (found version "5.68.0") 
-- Found Gettext: /usr/bin/msgmerge (found version "0.19.8.1") 
-- Found KF5I18n: /usr/lib/x86_64-linux-gnu/cmake/KF5I18n/KF5I18nConfig.cmake (found version "5.68.0") 
-- Found KF5WidgetsAddons: /usr/lib/x86_64-linux-gnu/cmake/KF5WidgetsAddons/KF5WidgetsAddonsConfig.cmake (found version "5.68.0") 
-- Found KF5: success (found suitable version "5.68.0", minimum required is "5.2.0") found components: CoreAddons I18n WidgetsAddons 
-- The following REQUIRED packages have been found:

 * ECM (required version >= 1.0.0)
 * Qt5Gui (required version >= 5.12.8)
 * Qt5 (required version >= 5.3.0)
 * Qt5Core (required version >= 5.12.0)
 * KF5CoreAddons (required version >= 5.2.0)
 * Gettext
 * KF5I18n (required version >= 5.2.0)
 * Qt5Widgets (required version >= 5.12.0)
 * KF5WidgetsAddons (required version >= 5.2.0)
 * KF5 (required version >= 5.2.0)

-- Configuring done
-- Generating done
-- Build files have been written to: /home/simon/Documents/Code/helloWorld/build
Scanning dependencies of target helloworld_autogen
[ 25%] Automatic MOC for target helloworld
[ 25%] Built target helloworld_autogen
Scanning dependencies of target helloworld
[ 50%] Building CXX object CMakeFiles/helloworld.dir/helloworld_autogen/mocs_compilation.cpp.o
[ 75%] Building CXX object CMakeFiles/helloworld.dir/helloWorld.cpp.o
In file included from /home/simon/Documents/Code/helloWorld/helloWorld.cpp:6:
/home/simon/Documents/Code/helloWorld/mainwindow.h:4:10: fatal error: KXmlGuiWindow: No such file or directory
    4 | #include <KXmlGuiWindow>
      |          ^~~~~~~~~~~~~~~
compilation terminated.
make[2]: *** [CMakeFiles/helloworld.dir/build.make:76: CMakeFiles/helloworld.dir/helloWorld.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:82: CMakeFiles/helloworld.dir/all] Error 2
make: *** [Makefile:141: all] Error 2

Добавление флага устранило одну из ошибок, упомянутую в исходном сообщении. У меня по-прежнему возникают другие ошибки, но я сначала поищу существующие решения.

1 ответ

Решение

Сложно ответить на вопрос с небольшим количеством важных данных, но я постараюсь дать вам несколько советов, как решить проблему.

  1. Во-первых, каково полное сообщение об ошибке? Это исходит от компилятора или компоновщика? Думаю, дело в компиляторе. Так что, скорее всего, компилятор недоволен следующей строкой:
      #include <KXmlGuiWindow>

Если это так, вы должны увидеть (и включить сюда) сообщение компилятора с номером строки, в которой он «увидел» проблему, скажем, «строка 4».

  1. Проверьте, установлен ли у вас где-нибудь этот файл
      find /usr -name KXmlGuiWindow

В моем случае ответ такой:

/ usr / include / KF5 / KXmlGui / KXmlGuiWindow

Если удастся найти, добавьте обычный -IPATH_TO_THE_FILE флаг к флагам компиляции.

В противном случае у вас нет необходимой библиотеки. Тем не менее, список файлов , включенных в пакет Kubuntu можно найти в интернете, например , здесь: (плюс минус версия Kubuntu): https://packages.ubuntu.com/xenial/amd64/libkf5xmlgui-dev/filelist файл, который компилятор не может найти, находится в списке в /usr/include/KF5/KXmlGui/ каталог.

Итак, скорее всего добавление

      -I/usr/include/KF5/KXmlGui/

к флагам компилятора должно решить вашу проблему.

Другие вопросы по тегам