LINUX.ORG.RU

Компиляция в geany

 


0

1

Не могу скомпилить Hello World в geany на языке C.

#include <gtk/gtk.h>
int main( int   argc,
          char *argv[] )
{
    gtkwidget *window;
    
    gtk_init (&argc, &argv);
    
    window = gtk_window_new (gtk_window_toplevel);
    gtk_widget_show  (window);
    
    gtk_main ();
    
    return 0;
}

build.c:1:21: фатальная ошибка: gtk/gtk.h: Нет такого файла или каталога

В чем проблема?

gtk/gtk.h: Нет такого файла или каталога

И не благодари.

olibjerd ★★★★★ ()
Ответ на: комментарий от LongLiveUbuntu

Ух е-мое. Я косоглазый становлюсь, походу.

Таки да, надо ставить gtk.

Zhbert ★★★★★ ()
Ответ на: комментарий от J

В убунте по определению нет такого файла или каталога?

Поясняю. Я неправильно прочитал сообщение об ошибке, приняв его за более распространенное отсутствие в системе build-essential, чем часто пестрят все вопросы «не компиляется!» от начинающих кодеров. У них обычно убунта.

Ну и попутно дистрибутив уточнил.

Zhbert ★★★★★ ()
Ответ на: комментарий от Zhbert

Ос Ubuntu, build essential стоит. Если компилить через терминал командой

gcc build.c -o base `pkg-config --cflags --libs gtk+-2.0`

то ошибка вот такая:

build.c: В функции «main»:
build.c:5:5: ошибка: unknown type name «gtkwidget»
build.c:9:30: ошибка: «gtk_window_toplevel» undeclared (first use in this function)
build.c:9:30: замечание: each undeclared identifier is reported only once for each function it appears in
build.c:10:5: предупреждение: в передаче аргумента 1 «gtk_widget_show»: несовместимый тип указателя [по умолчанию включена]
In file included from /usr/include/gtk-2.0/gtk/gtkcontainer.h:35:0,
                 from /usr/include/gtk-2.0/gtk/gtkbin.h:35,
                 from /usr/include/gtk-2.0/gtk/gtkwindow.h:36,
                 from /usr/include/gtk-2.0/gtk/gtkdialog.h:35,
                 from /usr/include/gtk-2.0/gtk/gtkaboutdialog.h:32,
                 from /usr/include/gtk-2.0/gtk/gtk.h:33,
                 from build.c:1:
/usr/include/gtk-2.0/gtk/gtkwidget.h:851:9: замечание: expected «struct GtkWidget *» but argument is of type «int *»

Chillwood ()
Ответ на: комментарий от Zhbert

чем часто пестрят все вопросы «не компиляется!»

Значит видишь вопрос «не компилируется» и сразу автотетное мнение? Я С в глаза не видел, но в глаза сразу бросилось

#include <gtk/gtk.h>
gtk/gtk.h: Нет такого файла или каталога
убунта во всём виновата.

J ★★★★ ()
Ответ на: комментарий от J

Причем здесь авторитетное мнение? Ошибся, с кем не бывает.

Zhbert ★★★★★ ()
Ответ на: комментарий от J

Прикол в том, что человек винит во всем geany ☺

А geany — не gcc, а обычный текстовый редактор!

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Все возможно. Тем более, что с убунтой я угадал.

Zhbert ★★★★★ ()
Ответ на: комментарий от Eddy_Em

Ну выходит дело не в geany, раз и в терминале не компилит. Сразу думал, что дело в geany

Chillwood ()

1. gcc 1.c $(pkg-config --libs --cflags gtk+)
2. Лучше пользуйся cmake

3.Поздравляю, Шарик, ты — балбес!

#include <gtk/gtk.h>
int main( int   argc,
          char *argv[] )
{
    GtkWidget *window;

    gtk_init (&argc, &argv);

    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_show  (window);

    gtk_main ();

    return 0;
}

Eddy_Em ☆☆☆☆☆ ()
Последнее исправление: Eddy_Em (всего исправлений: 4)
Ответ на: комментарий от Chillwood

Регистр соблюдай блин.

#include <gtk/gtk.h>
int main( int   argc,
          char *argv[] )
{
    GtkWidget *window;
    
    gtk_init (&argc, &argv);
    
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
    gtk_widget_show  (window);
    
    gtk_main ();
    
    return 0;
}

false ★★★★★ ()
Ответ на: комментарий от Chillwood

В gtk куча макросов и такие вещи могут ещё не раз вылезть. Советую использовать в качестве редактора QtCreator. Там можно задавать произвольную команду сборки, если создать проект вот так и затем переключиться в режим настройки проекта.

quiet_readonly ★★★★ ()
Ответ на: комментарий от quiet_readonly

использовать в качестве редактора QtCreator

/0

Geany — отличнейший редактор. И не надо всякое кютешное говно советовать, кю!

Eddy_Em ☆☆☆☆☆ ()

geany
gtk/gtk.h: Нет такого файла или каталога

как? ну вот как можно винить редактор в отсутствии заголовочных файлов?!?!?

ТС - тебе скольк лет?
как давно в первый раз захотел что-то конпелять?
хоть на чём-то писал до этого?

q11q11 ★★★★★ ()
Ответ на: комментарий от false

Тред продемонстрировал, что ТС путает текстовый редактор с компилятором. И все.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

У ТСа явно не получается поставить в соответствие ошибку компилятора и строку исходного кода, которая её вызвала. QtCreator сделает это за него - он выдерет из вывода gcc строку в файле и поставит напротив неё иконку ошибки или варнинга.

Вы, Эдуард, считаете себя профи по разбору ошибок компиляции? Попробуйте как-нибудь по консольному выводу gcc отладить ошибки в шаблонах, особенно при использовании boost.

quiet_readonly ★★★★ ()
Ответ на: комментарий от Eddy_Em

Geany — отличнейший редактор

+1
geany второй по скорости открывания больших текстовых файлов (50мегов и более)
первый - (g)Vim

q11q11 ★★★★★ ()
Ответ на: комментарий от quiet_readonly

Вы, Эдуард, считаете себя профи по разбору ошибок компиляции?

Нет, я тупо перенапрявляю выхлоп gcc в less, и просматриваю строчка за строчкой, исправляя ошибки и очепятки.

особенно при использовании boost

Какая связь между этой дрянью и gtk? Мы, между прочим, про C говорим!

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от Eddy_Em

Нет, я тупо перенапрявляю выхлоп gcc в less, и просматриваю строчка за строчкой, исправляя ошибки и очепятки.

Я не знаю, кто посоветовал ТСу использовать geany - но я уверен на 100%, что о less он даже не упомянул. И да, в QtCreator достаточно щёлкнуть по иконке ошибки слева от строки с проблемным кодом - и в списке ошибок выделится нужная. Лучше, чем less, не правда ли?

Какая связь между этой дрянью и gtk? Мы, между прочим, про C говорим!

Когда человек годами пишет на gtk/CUDA, он уже забывает, где и когда приобрёл знания по решению проблем. И часто просто их не замечает. Для ТСа ошибки компиляции в gtk выглядат как для вас - ошибки в шаблонах буста. Вот я и предлагаю прочувствовать ситуацию.

quiet_readonly ★★★★ ()
Ответ на: комментарий от quiet_readonly

достаточно щёлкнуть

Мастдайный какой-то путь. Тупиковый.

Для ТСа ошибки компиляции в gtk выглядат как для вас - ошибки в шаблонах буста

ТС вообще читать не умеет. Ясно же написана ошибка. А раз компилятор не может найти заголовочный файл, то либо файла нет (т.е. нужно установить gtk2 для разработчиков), либо не указаны пути (а это делается при помощи pkg-config --cflags gtk+). Потом еще возникнут проблемы с линковкой, которые решаются тем же pkg-config с ключем --libs.

Для одного файла можно обойтись приведенной выше строчкой, а вот если проект побольше, то проще таки использовать cmake. Ну, или же для адептов кошерности — autotools.

Но да, сам таким был.

Eddy_Em ☆☆☆☆☆ ()
Последнее исправление: Eddy_Em (всего исправлений: 1)
Ответ на: комментарий от Eddy_Em

ТС вообще читать не умеет. Ясно же написана ошибка. А раз компилятор не может найти заголовочный файл, то либо файла нет

Вы следующую ошибку видели? ТС смог подключить файл корректно, но увидел ошибку компиляции и решил что сделал только хуже.

Но это конечно очевидно и интуитивно понятно, что GtkWidget - правильный класс, а gtkwidget - это просто мусор, задефайненный как int или ещё как-то им ставший.

quiet_readonly ★★★★ ()
Ответ на: комментарий от quiet_readonly

А, дык, понятное дело: с регистром намудрил.

Eddy_Em ☆☆☆☆☆ ()
Ответ на: комментарий от false

В Geany действительно тоже можно задавать свою команду для построения проекта. Но я обычно пишу либо Makefile, либо использую CMake.

hibou ★★★★★ ()

TC, вот тебе простейший CMakeLists.txt

# Имя проекта 
PROJECT(hello) 
SET (APP_NAME hello)

# Минимальная версия cmake 
CMAKE_MINIMUM_REQUIRED(VERSION 2.6) 

# Используем pkgconfig для поиска GTK3 
FIND_PACKAGE(PkgConfig REQUIRED) 
PKG_CHECK_MODULES(GTK3 REQUIRED gtk+-3.0) 

# Настраиваем пути для поиска заколовочных файлов и библиотек 
# Переменные будут заполнены если pkgconfig нашел GTK3
INCLUDE_DIRECTORIES(${GTK3_INCLUDE_DIRS}) 
LINK_DIRECTORIES(${GTK3_LIBRARY_DIRS}) 

# Добавляем флаги компиляции 
ADD_DEFINITIONS(${GTK3_CFLAGS_OTHER}) 

# Исполняемый файл и исходник 
ADD_EXECUTABLE(${APP_NAME} hello.c) 

# Линкуем с нужными библиотеками 
TARGET_LINK_LIBRARIES(${APP_NAME} ${GTK3_LIBRARIES})

Подредактируй только под свои нужды. Например название исходника измени. Файл кладется в директорию с проектом (путь к исходнику указывается относительно от места, куда ты положишь этот файл). По команде «cmake .» генерируется Makefile и затем командой «make» можно собрать проект. Команда «make», кажется, прописана в Geany по умолчанию для сборки. Так что, сможешь собирать и из Geany.

hibou ★★★★★ ()

В итоге

1) Установить пакет libgtk-3-dev (или libgtk2.0-dev)

2) В главном меню Geany Сборка -> Установить команды сборки и дописать командам скомпилировать и сборка в конец: `pkg-config --cflags --libs gtk+-3.0` (или `pkg-config --cflags --libs gtk+-2.0`)

Хороший пример есть в wikipedia :) А пример makefile можно посмотреть здесь http://developer.gnome.org/gtk-faq/stable/x425.html (При копировании, в двух строчках пробелы нужно заменить на табуляцию, но это мелочь. Да и gtk+-2.0 можно заменить на gtk+-3.0)

neon1ks ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.