Компиляция приложения, использующего GTK

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Компиляция приложения, использующего GTK

Сообщение unclechu » 29.06.2012 06:26:35

Доброго времени суток! У меня такая дилема, решил на досуге кое-чего написать на Object Pascal с граф-интерфейсом (Qt не предлагать). wxWidgets официально FPC не поддерживается, выбор следовательно за GTK. Использую я 64-bit xubuntu со свежими обновлениями. Поставил fpc с офф. репозиториев 2.4.0 версии. При попытке компилировать приложение, у которого просто в uses прописано gtk, glib, — сразу полезла куча ошибок. Нарыл по ссылкам, что нужно сделать симлинки на либы. Сделал:
Код: Выделить всё
ln -s /usr/lib/x86_64-linux-gnu/libgtk-x11-2.0.so /usr/lib/libgtk.so
ln -s /usr/lib/x86_64-linux-gnu/libgdk-x11-2.0.so /usr/lib/libgdk.so
ln -s /usr/lib/x86_64-linux-gnu/libglib-2.0.so /usr/lib/libgdk.so

Гора ошибок про GTK сразу уменьшилась, но к сожалению не исчезла вовсе. Я думал, что проблема в версии fpc, поставил свежие бинарники install.sh-ом 2.6.0 c офф. сайта. Но ошибки не исчезли:
Код: Выделить всё
fpc test.pas
Free Pascal Compiler version 2.6.0 [2011/12/23] for x86_64
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling ex1.pp
Linking ex1
/usr/bin/ld: warning: link.res contains output sections; did you forget -T?
ex1.o: In function `main':
ex1.pp:(.text+0x75): undefined reference to `gtk_signal_connect'
/usr/local/lib/fpc/2.6.0/units/x86_64-linux/gtk1/gtk.o: In function `GTK_GTK_CHECK_CLASS_TYPE$PGTKTYPECLASS$LONGWORD$$BOOLEAN':
gtk.pp:(.text+0x131): undefined reference to `gtk_type_is_a'
/usr/local/lib/fpc/2.6.0/units/x86_64-linux/gtk1/gtk.o: In function `GTK_GTK_IS_DATA_CLASS$POINTER$$BOOLEAN':
gtk.pp:(.text+0x314): undefined reference to `gtk_data_get_type'
/usr/local/lib/fpc/2.6.0/units/x86_64-linux/gtk1/gtk.o: In function `GTK_GTK_IS_PACKER_CLASS$POINTER$$BOOLEAN':
gtk.pp:(.text+0x1064): undefined reference to `gtk_packer_get_type'
/usr/local/lib/fpc/2.6.0/units/x86_64-linux/gtk1/gdk.o: In function `GDK_GDK_GET_ROOT_WINDOW$$PGDKWINDOW':
gdk.pp:(.text+0xdb): undefined reference to `gdk_root_window'
/usr/local/lib/fpc/2.6.0/units/x86_64-linux/gtk1/gdk.o: In function `GDK_GDK_GET_ROOT_PARENT$$PGDKWINDOW':
gdk.pp:(.text+0xeb): undefined reference to `gdk_root_parent'
ex1.pp(23,1) Error: Error while linking
ex1.pp(23,1) Fatal: There were 1 errors compiling module, stopping
Fatal: Compilation aborted
Error: /usr/local/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)


Код самой программы:
Код: Выделить всё
program testgtk;

{$mode objfpc}

uses
   glib, gtk;

begin
   writeln('test');
end.


Вообще я хочу писать на GTK 2, ошибки валятся, связанные с папкой GTK 1, тут что-то не так с версиями? Помогите, добрые люди. Спасибо!
unclechu
новенький
 
Сообщения: 15
Зарегистрирован: 29.06.2012 06:11:58

Re: Компиляция приложения, использующего GTK

Сообщение Mr.Smart » 29.06.2012 07:26:38

Поставьте ещё и Lazarus. Зависимости разрешаться при установке.
Код: Выделить всё
sudo apt-get install lazarus-ide
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Компиляция приложения, использующего GTK

Сообщение unclechu » 30.06.2012 00:11:32

Mr.Smart писал(а):Поставьте ещё и Lazarus. Зависимости разрешаться при установке.
Код: Выделить всё
sudo apt-get install lazarus-ide

Вот что получилось:
Код: Выделить всё
$ fpc test.pas
Free Pascal Compiler version 2.6.0 [2011/12/23] for x86_64
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling ex1.pp
Fatal: Can't find unit glib used by ex1
Fatal: Compilation aborted
Error: /usr/local/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)
unclechu
новенький
 
Сообщения: 15
Зарегистрирован: 29.06.2012 06:11:58

Re: Компиляция приложения, использующего GTK

Сообщение Alexx2000 » 30.06.2012 01:16:54

unclechu писал(а):Вообще я хочу писать на GTK 2, ошибки валятся, связанные с папкой GTK 1, тут что-то не так с версиями?

Именно, если вы хотите использовать GTK2, то вместо:
Код: Выделить всё
uses
   glib, gtk;

надо писать
Код: Выделить всё
uses
   glib2, gtk2;
Аватара пользователя
Alexx2000
постоялец
 
Сообщения: 489
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи

Re: Компиляция приложения, использующего GTK

Сообщение unclechu » 30.06.2012 02:55:12

Alexx2000 писал(а):
unclechu писал(а):Вообще я хочу писать на GTK 2, ошибки валятся, связанные с папкой GTK 1, тут что-то не так с версиями?

Именно, если вы хотите использовать GTK2, то вместо:
Код: Выделить всё
uses
   glib, gtk;

надо писать
Код: Выделить всё
uses
   glib2, gtk2;

Спасибо, но вот-с:
Код: Выделить всё
fpc ex1.pas
Free Pascal Compiler version 2.6.0 [2011/12/23] for x86_64
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling ex1.pas
Fatal: Can't find unit glib2 used by ex1
Fatal: Compilation aborted
Error: /usr/local/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)

То же и с gtk2:
Код: Выделить всё
fpc ex1.pas
Free Pascal Compiler version 2.6.0 [2011/12/23] for x86_64
Copyright (c) 1993-2011 by Florian Klaempfl and others
Target OS: Linux for x86-64
Compiling ex1.pas
Fatal: Can't find unit gtk2 used by ex1
Fatal: Compilation aborted
Error: /usr/local/bin/ppcx64 returned an error exitcode (normal if you did not specify a source file to be compiled)
unclechu
новенький
 
Сообщения: 15
Зарегистрирован: 29.06.2012 06:11:58

Re: Компиляция приложения, использующего GTK

Сообщение Vadim » 30.06.2012 05:21:42

unclechu
Проверьте внимательно, есть ли такие откомпилированные юниты в каталоге /usr/lib/fpc/2.6.0/units/.
Если есть - у Вас проблемы с путями в файле /etc/fpc.cfg.
Если нет - смотрите в архиве компилятора, который Вы скачали.
Вы версию 2.4 не забыли снести перед установкой 2.6?
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Компиляция приложения, использующего GTK

Сообщение unclechu » 30.06.2012 06:44:04

Vadim писал(а):unclechu
Проверьте внимательно, есть ли такие откомпилированные юниты в каталоге /usr/lib/fpc/2.6.0/units/.
Если есть - у Вас проблемы с путями в файле /etc/fpc.cfg.
Если нет - смотрите в архиве компилятора, который Вы скачали.
Вы версию 2.4 не забыли снести перед установкой 2.6?

Не забыл.
Код: Выделить всё
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/*
-Fu/usr/lib/fpc/$fpcversion/units/$fpctarget/rtl

#ifdef cpux86_64
-Fl/usr/lib/gcc/x86_64-linux-gnu/4.6
#endif

#ifdef cpui386
-Fl/usr/lib/gcc/x86_64-linux-gnu/4.6
#endif

#
# That's all folks
#
-Fl/usr/lib/x86_64-linux-gnu


В Lazarus всё отлично работает! uses gtk2, glib2, но почему не работает с простым fpc? Сделал обычное окошко GTK в консоль-приложении Lazarus, всё собралось и выполнилось. В чём собственно может быть проблема?

Добавлено спустя 7 минут 37 секунд:
И можно сразу походу задать вопрос, если делать на формочках Lazarusa, то конечное приложение хочет какие-то либы для своего запуска? GTK тот-же например? Или бинарник запустится без привязок? Можно ли из Лазаруса компилировать под венду из линукса?
unclechu
новенький
 
Сообщения: 15
Зарегистрирован: 29.06.2012 06:11:58

Re: Компиляция приложения, использующего GTK

Сообщение Vadim » 30.06.2012 10:49:19

unclechu писал(а):Не забыл.

Не верю! Докажите... ;)
unclechu писал(а):В Lazarus всё отлично работает! uses gtk2, glib2, но почему не работает с простым fpc?

Вот это свидетельствует о том, что Lazarus обращается к другому компилятору, в fpc.cfg которого пути правильные, иначе Вы бы получили ту же ошибку, что и при компилировании в чистом fpc.
Давайте зайдём с другой стороны. Открываете synaptic, набираете в поиске "fpc" и смотрите:
1) файлы fpc помечены, что они установлены?
2) какая версия у этих файлов?
Запускаете Lazarus, выбираете в меню "Справка - О проекте Lazarus" и смотрите:
- какая версия fpc там указана?
unclechu писал(а):И можно сразу походу задать вопрос, если делать на формочках Lazarusa, то конечное приложение хочет какие-то либы для своего запуска?

Совершенно без разницы, где Вы программируете - в консоли или в Lazarus'e. Пользовательский интерфейс GTK лежит именно в библиотеках GTK, ну и, плюс к этому, какие-то дополнительные функции в GLIB. Ваша программа только вызывает эти функции и не более того.
unclechu писал(а):Можно ли из Лазаруса компилировать под венду из линукса?

Можно, но не нужно. Компиляция кода - это не главное в программировании. Главное - правильная разработка и, после компиляции, отладка. Как Вы будете свою виндовую программу отлаживать в Linux64, знаете? :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Компиляция приложения, использующего GTK

Сообщение unclechu » 30.06.2012 12:57:18

Vadim писал(а):
unclechu писал(а):Не забыл.

Не верю! Докажите... ;)
unclechu писал(а):В Lazarus всё отлично работает! uses gtk2, glib2, но почему не работает с простым fpc?

Вот это свидетельствует о том, что Lazarus обращается к другому компилятору, в fpc.cfg которого пути правильные, иначе Вы бы получили ту же ошибку, что и при компилировании в чистом fpc.
Давайте зайдём с другой стороны. Открываете synaptic, набираете в поиске "fpc" и смотрите:
1) файлы fpc помечены, что они установлены?
2) какая версия у этих файлов?
Запускаете Lazarus, выбираете в меню "Справка - О проекте Lazarus" и смотрите:
- какая версия fpc там указана?
unclechu писал(а):И можно сразу походу задать вопрос, если делать на формочках Lazarusa, то конечное приложение хочет какие-то либы для своего запуска?

Совершенно без разницы, где Вы программируете - в консоли или в Lazarus'e. Пользовательский интерфейс GTK лежит именно в библиотеках GTK, ну и, плюс к этому, какие-то дополнительные функции в GLIB. Ваша программа только вызывает эти функции и не более того.
unclechu писал(а):Можно ли из Лазаруса компилировать под венду из линукса?

Можно, но не нужно. Компиляция кода - это не главное в программировании. Главное - правильная разработка и, после компиляции, отладка. Как Вы будете свою виндовую программу отлаживать в Linux64, знаете? :)

Делал dpgk -l | grep fpc и всё связанное поочерёдно сносил, потом делал dpgk -l | grep fp и всё связанное с fpc тоже сносил, которые fp-... После только уже ставил 2.6.0

Я спрашивал про родные LCL или как они там в Лазарусе называются. Если я откомпилирую для венды бинарник, созданный на этих формочках, то он на нулёвой венде запустится без доставлений GTK и прочих либ?

Добавлено спустя 6 минут 16 секунд:
Vadim писал(а):Запускаете Lazarus, выбираете в меню "Справка - О проекте Lazarus" и смотрите:
- какая версия fpc там указана?

2.4.4

Vadim писал(а):Давайте зайдём с другой стороны. Открываете synaptic, набираете в поиске "fpc" и смотрите:
1) файлы fpc помечены, что они установлены?
2) какая версия у этих файлов?

Поставлены все возможные fp- версии 2.4.4 (до этого удалял 2.4.4, сейчас же то. что было поставлено с Lazarus)
unclechu
новенький
 
Сообщения: 15
Зарегистрирован: 29.06.2012 06:11:58

Re: Компиляция приложения, использующего GTK

Сообщение alexs » 30.06.2012 13:31:38

unclechu писал(а):Или бинарник запустится без привязок? Можно ли из Лазаруса компилировать под венду из линукса?


1. По умолчанию в линуксе Lazarus использует GTK2 (реже QT). Соответсвенно, если вы ничего не меняли - то эти зависимости вам понадобятся.
2. Для отладки - смысла нет. (Хотя можно отлаживать через WINE). А для финальной сборки - пожалуста, проблем нет. Хотя я обычно финальные сборки делаю скриптами, не запуская IDE.
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4064
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Компиляция приложения, использующего GTK

Сообщение Vadim » 30.06.2012 16:08:18

unclechu писал(а):Если я откомпилирую для венды бинарник, созданный на этих формочках, то он на нулёвой венде запустится без доставлений GTK и прочих либ?

Я же Вам написал, что весь интерфейс GTK находится в библиотеках. Вы этого не прочитали или не поняли? Ответ совершенно очевиден - без библиотек ничего нигде работать не будет.
unclechu писал(а): - какая версия fpc там указана?

2.4.4

Вот Вам и ответ - в консоли Вы обращаетесь к одному fpc (2.6.0), который свои юниты не видит, потому что проблема с конфигурационным файлом, а Lazarus обращается к другому (2.4.4), у которого с конфигурационным фалом всё в порядке. Это первое.
Второе. Вы не потрудились ответить на вопрос - нашли ли Вы в каталоге /usr/lib/fpc/2.6.0 откомпилированные юниты gtk2 и glib2? Или это коммерческая тайна? :)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Компиляция приложения, использующего GTK

Сообщение unclechu » 30.06.2012 23:30:10

Vadim писал(а):Я же Вам написал, что весь интерфейс GTK находится в библиотеках. Вы этого не прочитали или не поняли? Ответ совершенно очевиден - без библиотек ничего нигде работать не будет.

А вопрос был несколько иной. Это я сейчас ручными командами разрабатываю интерфейс на GTK. А если я буду ГУЙ делать на формочках Лазаруса, то что это будет в конечном итоге? Прямое общение с X Window System или же это обёртка над GTK? Я понимаю, что то, что я делаю сейчас, требует либ GTK.

Vadim писал(а):Вот Вам и ответ - в консоли Вы обращаетесь к одному fpc (2.6.0), который свои юниты не видит, потому что проблема с конфигурационным файлом, а Lazarus обращается к другому (2.4.4), у которого с конфигурационным фалом всё в порядке. Это первое.

Изначально всё было на 2.4.4, пока я всё не вычистил и ради эксперимента не поставил 2.6.0, не работало в обоих случаях. Я изначально всё пробовал это проделать на 2.4.4.

Код: Выделить всё
unclechu@unclechu-nb:/usr/lib/fpc/2.4.4$ find -name "*gtk*"
./units/x86_64-linux/gtk1
./units/x86_64-linux/gtk1/gtkglarea.ppu
./units/x86_64-linux/gtk1/libpgtkglarea.a
./units/x86_64-linux/gtk1/gtk.o
./units/x86_64-linux/gtk1/libpgtk.a
./units/x86_64-linux/gtk1/gtkglarea.o
./units/x86_64-linux/gtk1/gtk.ppu
./units/x86_64-linux/fpgtk
./units/x86_64-linux/fpgtk/libpfpgtkext.a
./units/x86_64-linux/fpgtk/libpfpgtk.a
./units/x86_64-linux/fpgtk/fpgtkext.ppu
./units/x86_64-linux/fpgtk/fpgtkext.o
./units/x86_64-linux/fpgtk/fpgtk.o
./units/x86_64-linux/fpgtk/fpgtk.ppu
./units/x86_64-linux/gtk2
./units/x86_64-linux/gtk2/gtk2.o
./units/x86_64-linux/gtk2/gtk2ext.o
./units/x86_64-linux/gtk2/gtkglext.o
./units/x86_64-linux/gtk2/gtk2.ppu
./units/x86_64-linux/gtk2/libpgtkglext.a
./units/x86_64-linux/gtk2/libpgtk2ext.a
./units/x86_64-linux/gtk2/gtkglext.ppu
./units/x86_64-linux/gtk2/libpgtk2.a
./units/x86_64-linux/gtk2/buildgtk2.o
./units/x86_64-linux/gtk2/buildgtk2.ppu
./units/x86_64-linux/gtk2/gtk2ext.ppu
unclechu@unclechu-nb:/usr/lib/fpc/2.4.4$ find -name "*gdk*"
./units/x86_64-linux/gtk1/gdkpixbuf.o
./units/x86_64-linux/gtk1/gdk.o
./units/x86_64-linux/gtk1/libpgdkpixbuf.a
./units/x86_64-linux/gtk1/gdk.ppu
./units/x86_64-linux/gtk1/gdkpixbuf.ppu
./units/x86_64-linux/gtk1/libpgdk.a
./units/x86_64-linux/imlib/libpgdk_imlib.a
./units/x86_64-linux/imlib/gdk_imlib.ppu
./units/x86_64-linux/imlib/gdk_imlib.o
./units/x86_64-linux/gtk2/gdk2pixbuf.o
./units/x86_64-linux/gtk2/gdk2x.ppu
./units/x86_64-linux/gtk2/gdk2x.o
./units/x86_64-linux/gtk2/gdk2pixbuf.ppu
./units/x86_64-linux/gtk2/libpgdkglext.a
./units/x86_64-linux/gtk2/libpgdk2pixbuf.a
./units/x86_64-linux/gtk2/libpgdk2x.a
./units/x86_64-linux/gtk2/gdk2.o
./units/x86_64-linux/gtk2/gdkglext.o
./units/x86_64-linux/gtk2/libpgdk2.a
./units/x86_64-linux/gtk2/gdkglext.ppu
./units/x86_64-linux/gtk2/gdk2.ppu
unclechu@unclechu-nb:/usr/lib/fpc/2.4.4$ find -name "*glib*"
./units/x86_64-linux/pasjpeg/jpeglib.ppu
./units/x86_64-linux/pasjpeg/libpjpeglib.a
./units/x86_64-linux/pasjpeg/jpeglib.o
./units/x86_64-linux/gtk1/glib.o
./units/x86_64-linux/gtk1/libpglib.a
./units/x86_64-linux/gtk1/glib.ppu
./units/x86_64-linux/fpgtk/libpfpglib.a
./units/x86_64-linux/fpgtk/fpglib.ppu
./units/x86_64-linux/fpgtk/fpglib.o
./units/x86_64-linux/gtk2/glib2.o
./units/x86_64-linux/gtk2/glib2.ppu
./units/x86_64-linux/gtk2/libpglib2.a


Добавлено спустя 5 минут 52 секунды:
В install.sh fpc 2.6.0 нет описания деинсталляции, теперь только ручками я так понимаю выпиливать?

Добавлено спустя 31 минуту 21 секунду:
Выпилил руками из /urs/local/* (сюда при установке ставил) всё, что связано с 2.6.0, но это проблему не решило.
unclechu
новенький
 
Сообщения: 15
Зарегистрирован: 29.06.2012 06:11:58

Re: Компиляция приложения, использующего GTK

Сообщение Mr.Smart » 01.07.2012 00:12:55

unclechu писал(а):А если я буду ГУЙ делать на формочках Лазаруса, то что это будет в конечном итоге? Прямое общение с X Window System или же это обёртка над GTK?

Это будет зависеть от виджетов которые вы выбрали в настройках проекта. Если настройки по умолчанию, то в Windows - WinAPI, Linux - GTK2, MacOS X - carbon.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Компиляция приложения, использующего GTK

Сообщение unclechu » 01.07.2012 01:49:15

Ан, нет, постойте-ка! Всё компилится, это тестовый файл с первым gtk не работал. Всем спасибо! :)
GTK2 работает!
unclechu
новенький
 
Сообщения: 15
Зарегистрирован: 29.06.2012 06:11:58


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 17

Рейтинг@Mail.ru