使用 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中提到的那个错误。还是会报其他错误,但我会先寻找现有的解决方案。
很难用少量重要数据回答问题,但我会尝试给你一些提示来解决问题
- 首先,完整的错误信息是什么?它来自编译器还是链接器?我猜这是编译器。所以最有可能让编译器不高兴的是:
#include <KXmlGuiWindow>
如果是这样,您应该看到(并在此处包括)编译器消息以及它“看到”问题的行号,例如“第 4 行”。
- 检查你是否安装了这个文件某处
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/
编译器标志应该可以解决您的问题。
我在编译时遇到了 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中提到的那个错误。还是会报其他错误,但我会先寻找现有的解决方案。
很难用少量重要数据回答问题,但我会尝试给你一些提示来解决问题
- 首先,完整的错误信息是什么?它来自编译器还是链接器?我猜这是编译器。所以最有可能让编译器不高兴的是:
#include <KXmlGuiWindow>
如果是这样,您应该看到(并在此处包括)编译器消息以及它“看到”问题的行号,例如“第 4 行”。
- 检查你是否安装了这个文件某处
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/
编译器标志应该可以解决您的问题。