「致命的なエラー:gtk / gtk.h:そのようなファイルまたはディレクトリはありません」を使用してmake


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存在
キシロオリゴ

1
私はmain.cの内容を追加している@Baraiam
オサマ・

回答:


23

これは、GTK +を使用してものを構築するためのgtkヘッダーがないことを意味します。./configureステップでエラーが表示されなかったことは本当に奇妙です。これを解決するには、次のようにします。

sudo apt-get install libgtk2.0-dev

またはlibgtk-3-dev

それはそれを行う必要があります。


私は、#include <GTK / gtk.h>ライブラリを使用して、いくつかのコードをコンパイルしている
オサマ

私は、コマンドメイクを使用しようとしていますときに問題がある
オサマ

次に、関連するコードを追加して、複製が可能かどうかを確認できますか?
13

このコマンドを使用してコンパイルすると完全にコンパイルされますgcc main.c -o hellogtk-config --cflags --libs gtk+-2.0
osama

このリンクに行くと、あなたは私が何をしようとしていますかを理解しますaskubuntu.com/questions/397246/...を
オサマ・

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、2番目のコマンドは最初は機能しているように見えましたが、glibの「そのようなファイルまたはディレクトリがありません」という問題にもつながりました。:ソリューションは、より多くのようなものだったg++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
ルイピメンテルの

3

Gtk3と同等のdebian / ubuntuパッケージは libgtk-3-dev


debian busterで正確に動作します。このライブラリをインストールすると、以下のコマンドで簡単なソースコードを./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.