make를 사용하는“치명적 오류 : gtk / gtk.h : 해당 파일 또는 디렉토리 없음”


18

make 명령을 사용하여 빌드하려고합니다. 나는 이것을 따르고 있다 . GTK + 2와 C 언어를 사용하여 코드를 컴파일하고 있습니다

hp@ubuntu:~/amhello$ make
make  all-recursive
make[1]: Entering directory `/home/hp/amhello'
Making all in src
make[2]: Entering directory `/home/hp/amhello/src'
gcc -DHAVE_CONFIG_H -I. -I..     -g -O2 -MT main.o -MD -MP -MF .deps/main.Tpo -c -o         main.o main.c
main.c:3:20: fatal error: gtk/gtk.h: No such file or directory
compilation terminated.
make[2]: *** [main.o] Error 1
make[2]: Leaving directory `/home/hp/amhello/src'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/home/hp/amhello'
make: *** [all] Error 2

이것은 main.c 코드입니다

#include<config.h>
#include<stdio.h>
#include<gtk/gtk.h>
void static call(GtkWidget *widget,gpointer data) {
    g_print("%s \n",(gchar*) data);
}
int main(int agrc, char *agrv[]) {
    gtk_init(&agrc,&agrv);
    GtkWidget *window,*button;
    window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
    g_signal_connect(window,"delete-event",G_CALLBACK(gtk_main_quit),NULL);
    gtk_window_set_title(GTK_WINDOW(window),"one button");
    button=gtk_button_new_with_label("hello world");
    g_signal_connect(button,"clicked",G_CALLBACK(call),(gpointer) "hello world");
    gtk_container_set_border_width(GTK_CONTAINER(window),10);
    gtk_container_add(GTK_CONTAINER(window),button);
    gtk_widget_show_all(window);
    gtk_main();
    return (0);
}

파일이 상태대로 있는지 확인 했습니까? /gtk/gtk.h
Xylo

@Xylo는 확인하는 방법을 모른다. 어떻게 확인할 수 있는지 알려주세요
osama

디렉토리 /usr/include/gtk-2.0가 존재 하는지 확인
Xylo

1
@Baraiam 나는 main.c의 내용을 추가했습니다
osama

답변:


23

이것은 GTK +를 사용하여 물건을 빌드 할 gtk 헤더가 없다는 것을 의미합니다. ./configure 단계에서 오류가 나타나지 않았다는 것이 정말 이상합니다. 이 문제를 해결하려면 다음을 수행하십시오.

sudo apt-get install libgtk2.0-dev

또는 libgtk-3-dev.

그렇게해야합니다.


#include <gtk / gtk.h> 라이브러리를 사용하여 여러 코드를 컴파일했습니다
osama

문제는 내가 명령 make를 사용하려고 할 때입니다
osama

관련 코드를 추가하여 재생산이 가능한지 확인할 수 있습니까?
Braiam

이 명령을 사용하여 컴파일하면 완벽하게 호환됩니다. gcc main.c -o hellogtk-config --cflags --libs gtk+-2.0
osama

이 링크로 이동하면 내가 askubuntu.com/questions/397246/…
osama

9
sudo apt-get install build-essential gnome-devel

또한 다음과 같은 멋진 작업을 수행 할 수 있어야합니다.

g++ main.cpp -o base `pkg-config --cflags --libs gtk+-3.0`

그것은 pkg-config많은 시간을 절약하는 데 사용할 수 있습니다


적어도 내 경우에는을 실행할 필요가 없었고 sudo apt-get install build-essential gnome-devel두 번째 명령은 처음에는 작동하는 것처럼 보였지만 glib "No such file or directory"문제도 발생했습니다. 해결책은 다음과 같습니다.g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Rui Pimentel

3

Gtk3 상당의 데비안 / 우분투 패키지는 libgtk-3-dev


데비안 버스터에서 정확하게 작동합니다. 이 라이브러리를 설치 한 후 bellow 명령은 간단한 소스 코드를 ./helloworld 실행 파일로 컴파일 할 수 있습니다. gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
EsmaeelE

2

autotools를 사용하여 Makefile을 생성하므로 automake에게 프로젝트의 헤더 및 라이브러리 종속성을 찾고 최종 Makefile에 통합하는 방법을 알려줘야합니다. 이것은 내 전문 분야가 아니지만 올바른 방향으로 당신을 가리켜 드리겠습니다. 다음 대부분은 Automake 및 Autoconf와 함께 C / C ++ 라이브러리 사용 에있는 자습서를 기반으로합니다.

먼저 최상위 레벨 configure.ac 파일을 수정하여 Gtk-2.0 의존성을 추가해야합니다. PKG_CHECK_MODULES매크로를 사용하여 pkg-config해당 include 및 library 지시문을 찾을 수 pkg-config있습니다. 먼저 존재 하는지 확인하는 것이 좋으 므로 PKG_PROG_PKG_CONFIG테스트도 추가해야합니다 . 굵게 표시된 부분은 처음 시작한 amhello 튜토리얼의 파일과 관련하여 추가 된 내용을 나타냅니다.

AC_INIT([amhello], [1.0], [bug-automake@gnu.org])
AM_INIT_AUTOMAKE([-Wall -Werror foreign])
AC_PROG_CC
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_FILES([
 Makefile
 src/Makefile
])
dnl Test for pkg-config
PKG_PROG_PKG_CONFIG([0.22])
dnl Test for gtk+
PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10])
AC_OUTPUT

그런 다음 위 의 매크로 에서 사용한 식별자를 src/Makefile.am사용하여 CFLAGS 및 LIBS를 검색 할 수 있습니다.GTKPKG_CHECK_MODULES

bin_PROGRAMS = hello
hello_SOURCES = main.c
AM_CPPFLAGS = ${GTK_CFLAGS}
hello_LDADD = ${GTK_LIBS}

다시 실행할 때 make적절한 -I포함 경로, -L라이브러리 경로 및 라이브러리를 사용하여 src / Makefile을 다시 생성해야합니다 .


너는 천재 야. 나는 당신이 적절한 대답을 줄 수 있다는 것을 알고 있기 때문에 당신의 대답을 기다리고있었습니다. 고마워요 :)
osama
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.