Jednak u mnie nie znajduje takiej biblioteki (z resztą słusznie gdyż w "/usr/include" jej nie ma).
Podejrzewam, że trzeba coś zainstalować, lecz paczki bibliotek z gtkmm zainstalowałem.
Krzys:/home/krzys/programmer# aptitude search gtkmm
E: Błąd składniowy /usr/share/aptitude/aptitude-defaults.pl:49: Po wartości występują śmieci
i A libgtkmm-2.4-1c2a - C++ wrappers for GTK+ 2.4 (shared libraries)
p libgtkmm-2.4-dbg - C++ wrappers for GTK+ 2.4 (debug symbols)
i libgtkmm-2.4-dev - C++ wrappers for GTK+ 2.4 (development files)
p libgtkmm-2.4-doc - C++ wrappers for GTK+ 2.4 (documentation)
i libgtkmm-dev - C++ wrapper for GTK+ 1.2 (development files)
i libgtkmm-doc - C++ wrapper for GTK+ 1.2 (documentation)
i A libgtkmm1.2-0c2a - C++ wrappers for GTK+ 1.2 (shared libraries)
Proszę o wyrozumiałość, gdyż to jest pierwsza biblioteka z plikiem nagłówkowym, którą dołączę do programu (poza bibblioteką std).
/usr/include/gtk.h:31:21: error: gdk/gdk.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:32:32: error: gtk/gtkaboutdialog.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:33:31: error: gtk/gtkaccelgroup.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:34:31: error: gtk/gtkaccellabel.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:35:29: error: gtk/gtkaccelmap.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:36:31: error: gtk/gtkaccessible.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:37:27: error: gtk/gtkaction.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:38:32: error: gtk/gtkactiongroup.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:39:31: error: gtk/gtkadjustment.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:40:30: error: gtk/gtkalignment.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:41:26: error: gtk/gtkarrow.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:42:32: error: gtk/gtkaspectframe.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:43:30: error: gtk/gtkassistant.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:44:25: error: gtk/gtkbbox.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:45:24: error: gtk/gtkbin.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:46:29: error: gtk/gtkbindings.h: Nie ma takiego pliku ani katalogu
/usr/include/gtk.h:47:24: error: gtk/gtkbox.h: Nie ma takiego pliku ani katalogu
...
I tak jeszcze z 200 linijek.
Co powinienem zrobić, żeby widział tamte pliki nagłówkowe?
kazzomy pisze:Dzięki już działa, pierwszy raz spotykam się z takim sposobem załączania biblioteki.
chodzi o to, żeby kompilator wiedział gdzie ma szukać potrzebnych mu dodatkowych rzeczy przy kompilacji (dlatego to zmienione kompilowanie), oraz żeby linker wiedział gdzie są odpowiednie pliki, z którymi program ma zlinkować.
kazzomy pisze:Hmm, a może tak przy okazji powie mi ktoś dlaczego w tej linijce jest błąd? (...)
Ta linijka to za mało, żeby cokolwiek powiedzieć. Po błędzie jaki zwróciło gtk wynika, że chcesz pobrać ten clipboard, ale wskaźnik na element display, którego on potrzebuje jest NULLem, więc asercja zawiodła i pojawił się błąd. Tyle mozna wyczytać z tego komunikatu, pokaż więcej kodu, to może znajdziemy błąd.
Ta linijka to za mało, żeby cokolwiek powiedzieć. Po błędzie jaki zwróciło gtk wynika, że chcesz pobrać ten clipboard, ale wskaźnik na element display, którego on potrzebuje jest NULLem, więc asercja zawiodła i pojawił się błąd. Tyle mozna wyczytać z tego komunikatu, pokaż więcej kodu, to może znajdziemy błąd.
Chciałem pokazać na to co siedzi obecnie w schowku. Myślałem, że ta stała to właśnie robi, ale najwyraźniej się myliłem... Co do kodu to nie ma raczej co pokazywać. Nie jest to żaden program chciałem po prostu zobaczyć czy uda mi się przechwycić tablicę ze schowka(jest to mi potrzebne do późniejszego programu.
grzesiek ma rację. Nie zainicjowałeś gtk, a chcesz już coś od niego.
IMO nie trzeba studiować kodów źródłowych, wystarczy dokumentacja i przykłady w niej zawarte.
Mam tylko pytanie: po co uzywasz czystego gtk, które przeznaczone jest do języka C (wiem, że w C++ można też w tym bez problemu pisać), skoro masz gtkmm, które jest wersją gtk specjalnie dla C++ i jest duużo wygodniejsze w uzywaniu: dostajesz pełną obiektowość jaką udostępnia C++ a nie ma jej C, skracają Ci się nazwy funkcji, masz wyjątki C++-owe, więc nie widzę powodu dla którego miałbyś nie korzystać z gtkmm i męczyć się z czystym gtk.
Ja swego czasu dość mocno interesowałem się programowaniem w GTK+. Z moich doświadczeń pamiętam ze samodzielne opakowanie GTK+ w klasy wiązało się z problemem z sygnałami, szczegółów nie pamiętam ale pamiętam, że chyba SciTE jest tak napisany i ładnie tam ten problem rozwiązali.
Natomiast gtkmm też testowałem i nie powiem żeby było prostsze od GTK+, a zwłaszcza łączenie sygnałów, fakt funkcje są krótsze. Poza tym nie wiem jak teraz ale wtedy gtkmm nie było za bardzo na bieżąco za GTK+ ani też z poprawianiem błędów (nawet jakaś biblioteka nowa powstał z tego powodu tzn GTK+ --> C++ ale nie pamiętam nazwy).
Wreszcie czepne się do samego C++. Powiem tak... jak zaczynałem się uczyć programowania i doszedłem do do C++ (bo to jego najpierw się uczyłem a nie C) to byłem taki zachwycony, że oh i ah. Fakt ładnie to się sprawdza w czymś takim jak C++Builder. Przyzwyczajony do tej wygody szukałem właśnie jak fantastyczną bibliotekę GTK+ przenieść na C++ i doszedłem do wniosku (po analizie kodów źródłowych i próbach z wrapper-ami ), że w GTK+ najlepiej się pisze (jeżeli ma być wykorzystywane C/C++) w C. Jak ma być szybko to PyGTK
Python+PyGTK+Glade == prawie jak C++ Builder (cudowna sprawa)
Gdybym miał pisać jakiś program, gdzie dobrze by było zastosować obiekty to ok w C++ ale interfejs graficzny (w tym przypadku GTK+) bym zostawił poza klasami, a w klasy opakował tylko kod zarządzający. Tak mi się wydaje, że klasy można użyć tylko tam gdzie rzeczywiście z nich jest pożytek, a GTK+ napisane w C bez problemu można dołączyć do programu napisanego w C++ i kompilowanego przez g++.
Ale to wszystko zależy oczywiście od preferencji, nie mówię, że inne rozwiązanie jest gorsze.