Makeコマンドを使用してビルドしようとしています。 this をフォローしています。 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ヘッダーがないことを意味します。 ./configureステップでエラーが表示されなかったことは本当に奇妙です。これを解決するには、次のようにします。
Sudo apt-get install libgtk2.0-dev
またはlibgtk-3-dev
。
それはそれを行う必要があります。
Sudo apt-get install build-essential gnome-devel
次のようなクールなことができるようにするためにも必要です。
g++ main.cpp -o base `pkg-config --cflags --libs gtk+-3.0`
pkg-config
を使用して多くの時間を節約できます
Gtk3の同等のdebian/ubuntuパッケージはlibgtk-3-dev
です
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], [[email protected]])
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
で、上記のPKG_CHECK_MODULES
マクロで使用したGTK
識別子を使用してCFLAGSとLIBSを取得できます。
bin_PROGRAMS = hello
hello_SOURCES = main.c
AM_CPPFLAGS = ${GTK_CFLAGS}
hello_LDADD = ${GTK_LIBS}
make
を再実行すると、適切な-I
インクルードパス、-L
ライブラリパス、およびライブラリを使用してsrc/Makefileを再生成する必要があります。