【发布时间】:2022-01-13 06:52:39
【问题描述】:
我正在 debian11 上使用 cmake 构建 c 代码。因为我不太了解cmake。 当我构建代码时我出错了
fatal error: gio/gio.h: No such file or directory
17 | #include <gio/gio.h>
| ^~~~~~~~~~~
compilation terminated.
我安装了 glib 库并检查了系统中存在的内容
oot@rpi4-20210823:~/iot-hub-device-update# ls /usr/include/g
gconv.h gdk-pixbuf-2.0/ gio-unix-2.0/ glob.h gnumake.h grp.h gsl/ gtk-2.0/
gdb/ getopt.h glib-2.0/ gnu-versions.h graphite2/ gshadow.h gtest/ gtk-unix-print-2.0/
root@rpi4-20210823:~/iot-hub-device-update# ls /usr/include/glib-2.0/
所以在网上搜索后发现需要使用以下参数pkg-config --cflags --libs gtk+-2.0 构建。
输出是
This is output for ```root@rpi4-20210823:~/iot-hub-device-update# pkg-config --cflags --libs gtk+-2.0
-pthread -I/usr/include/gtk-2.0 -I/usr/lib/aarch64-linux-gnu/gtk-2.0/include -I/usr/include/pango-1.0 -I/usr/include/atk-1.0 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/pango-1.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/aarch64-linux-gnu/glib-2.0/include -I/usr/include/uuid -I/usr/include/freetype2 -I/usr/include/libpng16 -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango-1.0 -lgobject-2.0 -lglib-2.0 -lharfbuzz -lfontconfig -lfreetype```
但我没有找到将这个包含在 cmake 中的方法。
Aslo 通过在 cmaketest 文件中添加以下部分尝试了其他选项
pkg_check_modules(GTK "gtk+-2.0")
include_directories(${target_name} PUBLIC ${GTK_INCLUDE_DIRS})
target_link_libraries(${target_name} PUBLIC ${GTK_LIBRARIES})
target_compile_options(${target_name} PUBLIC ${GTK_CFLAGS_OTHER})
但是没用过请帮忙解决问题
谢谢
【问题讨论】:
-
如果你在终端运行
pkg-config --cflags --libs gtk+-2.0,它会输出什么?ls /usr/include/glib-2.0/的输出是什么(因为忘记粘贴了)? -
既然你传递了一个目标名称,你可能想要
target_include_directories而不是include_directories。 -
另外,在您的
CMakeLists.txt文件中,尝试message("GTK_INCLUDE_DIRS = '${GTK_INCLUDE_DIRS}'")以查看其设置是否正确(并且与pkg-config命令的输出相匹配)。 -
顺便,请edit您的问题包含相关信息。
-
如果您使用
ls /usr/include/glib-2.0/,是否列出了gio目录?里面有一个gio.h文件?如果你这样做,输出是什么?find /usr/include -name gio.h?头文件是否在预期的位置找到?还是根本没有?