es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Incluye pkg-config –cflags –libs gtk+-2.0 en Cmake.

Estoy construyendo código C usando CMake en Debian 11. Como no conozco mucho sobre CMake. Cuando construyo el código, obtengo el siguiente error:

fatal error: gio/gio.h: No existe el archivo o directorio
   17 | #include <gio/gio.h>
      |          ^~~~~~~~~~~
compilación terminada.

He instalado la biblioteca glib y he verificado que está presente en mi sistema:

root@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/

Entonces, después de buscar en internet, encontré que necesito construir con el siguiente argumento pkg-config --cflags --libs gtk+-2.0. El resultado es:

This is output forroot@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

Pero no encontré la forma de incluir esto en CMake.

También probé otra opción agregando la siguiente parte en el archivo “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})

Pero no funcionó. Por favor, ayuda para resolver el problema.

Gracias.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema está relacionado con las rutas de biblioteca faltantes para ‘gio/gio.h’. Como ya has instalado la biblioteca necesaria, puedes intentar seguir los siguientes pasos para incluirla en el archivo CMake:

    1. Agrega las siguientes líneas al archivo CMakeLists.txt:
    find_package(PkgConfig REQUIRED)
    pkg_check_modules(GIO REQUIRED gio-2.0)
    include_directories(${GIO_INCLUDE_DIRS})
    target_link_libraries(nombre_proyecto_cmake ${GIO_LIBRARIES})
    
    1. Reemplaza nombre_proyecto_cmake con el nombre real de tu proyecto CMake.
    2. Ejecuta los siguientes comandos para reconstruir el proyecto:

    mkdir build
    cd build
    cmake ..
    make
    
    1. Si la compilación es exitosa, deberías ver el archivo ejecutable en el directorio “build”.

    Espero que esto te ayude. Avísame si tienes alguna pregunta adicional.

Comments are closed.