Lỗi nghiêm trọng của người dùng: gtk / gtk.h: Không có tệp hoặc thư mục nào như vậy khi sử dụng make


18

Tôi đang cố gắng sử dụng lệnh make để xây dựng. Tôi đang theo dõi điều này . Tôi đang biên dịch mã bằng ngôn ngữ GTK + 2 và 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

đây là mã 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);
}

Bạn thậm chí đã kiểm tra nếu các tập tin là ở đó như nó nói? /gtk/gtk.h
Xylo

@Xylo không biết kiểm tra. vui lòng cho tôi biết làm thế nào tôi có thể kiểm tra
osama

kiểm tra xem thư mục /usr/include/gtk-2.0có tồn tại không
Xylo

1
@Baraiam tôi đã thêm nội dung của main.c
osama

Câu trả lời:


23

Điều này có nghĩa là bạn không có các tiêu đề gtk để xây dựng công cụ bằng GTK +. Điều thực sự kỳ lạ là lỗi không xuất hiện ở bước ./mình. Để giải quyết điều này chỉ cần làm:

sudo apt-get install libgtk2.0-dev

hoặc libgtk-3-dev.

Nên làm vậy.


tôi đã biên dịch một số mã bằng thư viện #include <gtk / gtk.h>
osama

vấn đề là khi tôi đang cố gắng sử dụng lệnh make
osama

Bạn có thể thêm mã liên quan để xem có thể sao chép không?
Braiam

công cụ biên dịch của tôi hoàn hảo khi tôi biên dịch nó bằng cách sử dụng lệnh này gcc main.c -o xin chàogtk-config --cflags --libs gtk+-2.0
osama

đi đến liên kết này và bạn sẽ hiểu những gì tôi đang cố gắng yêu cầu Ubuntu.com/questions/397246/NH
osama

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

Điều đó cũng cần thiết để bạn có thể làm những việc hay ho như:

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

Nó cho phép bạn sử dụng pkg-configđể tiết kiệm rất nhiều thời gian


Ít nhất trong trường hợp của tôi, tôi đã không phải thực thi sudo apt-get install build-essential gnome-develvà lệnh thứ hai dường như hoạt động lúc đầu, nhưng cũng dẫn đến vấn đề "Không có tệp hoặc thư mục như vậy". Giải pháp giống như:g++ `pkg-config --cflags gtk+-3.0` main.cpp -o base `pkg-config --libs gtk+-3.0`
Rui Pimentel

3

Gói debian / ub Ubuntu tương đương Gtk3 là libgtk-3-dev


Chính xác hoạt động trên buster debian. Sau khi cài đặt thư viện này, lệnh dưới đây có thể biên dịch mã nguồn đơn giản thành ./helloworld có thể thực thi được. gcc `pkg-config --cflags gtk+-3.0` -o helloworld helloworld.c `pkg-config --libs gtk+-3.0`
EsmaeelE

2

Vì bạn đang sử dụng autotools để tạo Makefiles của mình, bạn cần nói với autoake cách tìm tiêu đề và phụ thuộc thư viện của dự án của bạn và kết hợp chúng vào Makefiles cuối cùng. Đây không phải là lĩnh vực chuyên môn của tôi nhưng tôi sẽ cố gắng chỉ cho bạn đi đúng hướng. Hầu hết những điều sau đây dựa trên hướng dẫn được tìm thấy tại Sử dụng thư viện C / C ++ với Automake và Autoconf

Trước tiên, bạn phải sửa đổi tệp configure.ac cấp cao nhất để thêm phụ thuộc Gtk-2.0. Bạn có thể sử dụng PKG_CHECK_MODULESmacro để chạy pkg-configđể tìm các chỉ thị bao gồm và thư viện tương ứng - đó là cách tốt để kiểm tra xem có pkg-configtồn tại trước không, vì vậy chúng ta cũng nên thêm một PKG_PROG_PKG_CONFIGbài kiểm tra. Các phần được in đậm cho biết những gì được thêm vào, liên quan đến các tệp trong hướng dẫn amhello ban đầu mà bạn đã bắt đầu.

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

Sau đó, trong src/Makefile.ambạn có thể truy xuất CFLAGS và LIBS bằng cách sử dụng mã GTKđịnh danh mà bạn đã sử dụng trong PKG_CHECK_MODULESmacro ở trên

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

Khi bạn chạy lại make, nó sẽ tạo lại src / Makefile của bạn với các -Iđường dẫn bao gồm, -Lđường dẫn thư viện và thư viện thích hợp.


bạn là một thiên tài. tôi chỉ chờ đợi câu trả lời của bạn vì tôi biết bạn có thể đưa ra câu trả lời thích hợp. cảm ơn :)
osama
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.