使用 KXmlGuiWindow 构建 C++ 应用程序时出错

Error when building C++ application using KXmlGuiWindow

我在编译时遇到了 introductory tutorial for using the 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

添加标志解决了其中一个错误,即原文post中提到的那个错误。还是会报其他错误,但我会先寻找现有的解决方案。

很难用少量重要数据回答问题,但我会尝试给你一些提示来解决问题

  1. 首先,完整的错误信息是什么?它来自编译器还是链接器?我猜这是编译器。所以最有可能让编译器不高兴的是:
#include <KXmlGuiWindow>

如果是这样,您应该看到(并在此处包括)编译器消息以及它“看到”问题的行号,例如“第 4 行”。

  1. 检查你是否安装了这个文件某处
find /usr -name KXmlGuiWindow

在我的例子中,响应是:

/usr/include/KF5/KXmlGui/KXmlGuiWindow

如果你能找到它,将通常的 -IPATH_TO_THE_FILE 标志添加到编译标志中。

如果没有,则说明您没有所需的库。但是,您的 Kubuntu 包中包含的文件列表可以在 Internet 上找到,例如:(加上减去 Kubuntu 版本):https://packages.ubuntu.com/xenial/amd64/libkf5xmlgui-dev/filelist 编译器找不到的文件在列表中,在 /usr/include/KF5/KXmlGui/ 目录中。

所以,很可能添加

-I/usr/include/KF5/KXmlGui/

编译器标志应该可以解决您的问题。