Forum Coders' city Strona Główna Coders' city
Nasza pasja to programowanie!
 

 PomocPomoc   SzukajSzukaj   UżytkownicyUżytkownicy   GrupyGrupy  RejestracjaRejestracja 
Archiwum starego forum + teoria    RSS & Panel/SideBar
 ProfilProfil   Zaloguj się, by sprawdzić wiadomościZaloguj się, by sprawdzić wiadomości   ZalogujZaloguj 

Potrzebuję szybkiej odpowiedzi na moje pytanie... Zasady

[gtkmm] Instalacja-nieprawidłowe linkowanie elementów biblioteki



 
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Biblioteki
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
lynxpl



Dołączył: 07 Kwi 2015
Posty: 15
Skąd: Warszawa

PostWysłany: Nie Kwi 12, 2015 1:59 pm  OP    Temat postu: [gtkmm] Instalacja-nieprawidłowe linkowanie elementów biblioteki Odpowiedz z cytatem Pisownia

Witajcie.

Mam problem związany z instalacją biblioteki GTK+ wraz z nakładką gtkmm na swoim komputerze z
Win7 x64. W zależności od zastosowanego IDE albo mam błąd linkera (Dev-Cpp) albo kompilator wykonuje pusty przebieg (CodeBlocks).

Co do tej pory zrobiłem:
1. Ściągnąłem skompilowane pod MinGW biblioteki gtkmm 3.6 oraz GTK+ 3.6.4(20130921).
źródło
2. Rozpakowałem je do jednego folderu tak by pliki gtkmm były w odpowiednich podkatalogach razem z plikami GTK+.
3. Dopisałem zmienne systemowe we właściwościach systemu:
GTK_BASEPATH C:\cpplibs\GTK\
INCLUDE C:\cpplibs\GTK\INCLUDE;C:\cpplibs\GTK\INCLUDE\GTK-3.0; C:\cpplibs\GTK\INCLUDE\GLIB-2.0; C:\cpplibs\GTK\INCLUDE\PANGO-1.0; C:\cpplibs\GTK\INCLUDE\CAIRO; C:\cpplibs\GTK\INCLUDE\ATK-1.0; C:\cpplibs\GTK\LIB\GTK-3.0\INCLUDE;C:\cpplibs\GTK\LIB\GLIB-2.0\INCLUDE;
LIB C:\cpplibs\GTK\LIB
PKG_CONFIG_PATH C:\cpplibs\GTK\lib\pkgconfig

4. Uruchomiłem z wiersza poleceń programik pkg-config z argumentami --cflags gtkmm-3.0 oraz --libs gtkmm-3.0 generujący mi parametry dla kompilatora i konsolidatora.
5. Wkleiłem parametry z pkt. 4 do stosownych pól w opcjach projektu.

Czyli po bożemu jakby się wydawało. Tymczasem:
Dev-Cpp (wer.5.6.2) podaje błąd linkera poniższego typu:
Kompilator: MinGW GCC 4.8.1 32-bit Release
[...] mingw32-make.exe -f [...]
g++.exe -D__DEBUG__ -c maintgtk.cpp -o maintgtk.o [tu są parametry konsolidatora]
g++.exe: error: e/glib-2.0: No such file or directory
recipe for target 'maintgtk.o' failed [...]
mingw32-make.exe: *** [maintgtk.o] Error 1

No i lipa...kompilator informuje mnie jakoby nie było-jeśli dobrze rozumiem co do mnie mówi- glib-2.0. Tymczasem jest i stoi jak byk zarówno taki folder w \GTK\lib jak i plik glib-2.0.lib. O co chodzi? W parametrach jest komenda -lglib-2.0...
Próbowałem to samo z innym IDE, wiedząc jak złą renomą cieszy się Dev-Cpp na forach specjalistycznych. Spróbowałem CodeBlocks ale tam kompilator w ogóle nie widzi nic wykonując pusty przebieg:
-------------- Build: Debug in testgtkmm (compiler: GNU GCC Compiler)---------------
Linking stage skipped (build target has no object files to link)
Nothing to be done (all items are up-to-date).

Tak, próbowałem zainstalować GTK w CodeBlocks poprzez zmienne globalne ale nie udało się bo nieradzi sobie on z faktem że header gtk.h jest schowany w ściągniętej wersji biblioteki głębiej niż C::B się spodziewa.

Ktoś ma jakiś pomysł, co może być nie tak??? Bo sam już nie wiem jak do tego podejść. Ręczne include'owanie w ustawieniach kompilatora wszystkich *.h, *.a i *.lib przedmiotowej biblioteki to ostateczna ostateczność której chciałbym uniknąć...
Z góry dziękuje za pomoc.
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Olo



Dołączył: 22 Sty 2010
Posty: 164

PostWysłany: Nie Kwi 12, 2015 7:21 pm      Temat postu: Odpowiedz z cytatem Pisownia

http://stackoverflow.com/questions/11793370/how-can-i-convert-a-vsts-lib-to-a-mingw-a

=================
ps.
Przypomniałem sobie o stronie devpaks.org na której można znaleźć przekompilowane biblioteki.
Nazwą witryny nie trzeba się sugerować, biblioteki są do kompilatora, a nie do IDE.
Warto tam zajrzeć zanim się zacznie właśną kompilację z plików źródłowych.

_________________
2 × 2 = 3,999999999997
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
lynxpl



Dołączył: 07 Kwi 2015
Posty: 15
Skąd: Warszawa

PostWysłany: Czw Kwi 16, 2015 12:58 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Ja nie kompilowałem u siebie tylko znalazłem gotową, skompilowaną pod minGW.
Źródło. (Zepsuł mi się link w I poście).
Na devpackach jest stare gtk+ i gtkmm (ver.~2.2). Tymczasem, z tego co gdzieś (niestety nie pamiętam gdzie-chyba na oficjalnej stronie gtkmm) czytałem to wynika że działanie tych bibliotek jest zależne od posiadanej wersji minGW i jeśli się ma nowe minGW to starsze kompilacje gtk+ i gtkmm nie będą działać.
PS. Fakt, nie mam pewności czy moja wersja minGW jest identyczna z tą na której kompilowano ściągnięte biblioteki.

@Olo
Czy sugerujesz tym samym abym ściągnął paczkę skompilowaną pod VS i przerobił jej statyczne biblioteki?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Olo



Dołączył: 22 Sty 2010
Posty: 164

PostWysłany: Czw Kwi 16, 2015 5:19 pm      Temat postu: Odpowiedz z cytatem Pisownia

Przypuszczałem, że MinGW nie poradził sobie z plikami lib.
Ale zerknij na tę informację:
https://mail.gnome.org/archives/gtkmm-list/2014-January/msg00011.html
Chyba wersje się zgadzają.

_________________
2 × 2 = 3,999999999997
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
lynxpl



Dołączył: 07 Kwi 2015
Posty: 15
Skąd: Warszawa

PostWysłany: Sob Kwi 18, 2015 5:15 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

No właśnie od tego gościa mam te biblioteki.
Wróciłem do Deva bo z C::B sobie nie radziłem. Zainstalowałem też najnowszą wersję 5.10. Okazało się, że- głupia rzecz- przyczyną błędów linkowania było to że parametr wpisany w opcjach projektu był w pół słowa przedzielony enterem. Dlatego nie widział danej biblioteki. Poprawiłem to i program się kompiluje. To pół sukcesu- biblioteka dobrze była jednak zainstalowana.

Program testowy, typu puste okienko, jednak dalej nie działa. Próbując włączyć tego exe pojawia się błąd
nie znaleziono na komputerze biblioteki >>libglibmm-2.4-1.dll.<< spróbuj ponownie zainstalować program
Hmmm... przeszukałem foldery GTK i jest tam w \bin taki plik. Jednak w \lib są tylko libglibmm-2.4.dll.a i libglibmm-2.4.a
O co chodzi? Co jest nie tak, skoro gotowy program nie widzi swojej DLLki? Czy powinna być ona w jakiś specjalnym systemowym folderze aby była widoczna dla skompilowanego programu?
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Taeril



Dołączył: 20 Cze 2005
Posty: 1249

PostWysłany: Nie Kwi 19, 2015 10:23 am      Temat postu: Odpowiedz z cytatem Pisownia

Dynamic-Link Library Search Order

Czyli może być w systemowym katalogu ale nie polecam tego. Sugeruję albo skopiować potrzebne pliki .dll do katalogu z .exe (Dependency Walker pomoże ustalić które) albo umieścić ten katalog bin w PATH.


Udało mi się bez problemu skompilować proste hello world gtkmm w CodeBlocks ale programu nie dało się uruchomić. Z tego co wyszukałem problem leży w niekompatybilnej wersji libstdc++ użytej do skompilowania gtkmm i tej użytej poprzez mój kompilator. To samo miałem zarówno pod gcc 4.7 jak i 4.8 jakie dostarcza CodeBlocks.
Oznacza to że potrzeba skompilować gtkmm samemu. Na tym skończyłem zabawę.


Innym rozwiązaniem by było zainstalowanie MSYS2 - mintty i pacman daje całkiem przyjemne, jak na Windowsa, złudzenie linuksowego środowiska :) CodeBlocks jest zaprojektowane do używania różnych kompilatorów więc możliwe, że nawet dałoby się podpiąć mingw z MSYS2 pod to IDE ale nie próbowałem tego.

_________________
T.

"Some people, when confronted with a problem, think 'I know, I'll use regular expressions.' Now they have two problems." - Jamie Zawinski
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
lynxpl



Dołączył: 07 Kwi 2015
Posty: 15
Skąd: Warszawa

PostWysłany: Nie Kwi 19, 2015 12:02 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Rozumiem. Czyli jednak dobrze pamiętałem że zgodność minGW ma znaczenie.

Użyłem tego Dependency Walkera i wyłonił się z tego jakiś dramat.
Owszem, w pierwszym podejściu wskazał dwie brakujące DLLki. Po ich skopiowaniu do foldera *.exe'ka program dalej nie działał. Dołożenie każdej z nich wywołuje kolejną lawinę braków tak że w efekcie trzeba by przekopiować wszystkie DLLe GTK aby to działało... Bezsensu.
Zresztą tak zrobiłem, że skopiowałem swój *.exe do folderu \GTK\bin i prześledziłem jego zależności. Wszystkie biblioteki GTKmm widział, zgłaszał tylko brak DLLi z minGW(!!!) tzn. libstdc++-6.dll oraz libgcc_s_dw2-1.dll. Jak mu je skopiowałem z minGW\bin do GTK\bin to wreszcie zadziałał(!)
Tyle, że taki układ nie ma sensu.

Dopisałem więc zgodnie z sugestią Taerila ścieżki ...\GTK\bin oraz ...\minGW\bin do zmiennej systemowej PATH. To rozwiązało wszystkie problemy z DLLkami, w każdym miejscu. Program z użyciem GTKmm i kompilator działają . Dziękuje wszystkim za sugestie i podpowiedzi. Zwłaszcza Taerilowi.

Wychodzi więc na to, że jeśli chciałbym użyć gotowego programu używającego GUI-gtkmm na innym niż mój kompie to musiałbym razem z tym programem skopiować całe binaria GTK oraz minGW + zmieniać zmienne systemowe. Czyli program, sam w sobie byłby nie przenośny między komputerami z windowsem- tak jak konsolowy- a wymagałby czegoś na kształt instalacji, dobrze to rozumiem??
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Taeril



Dołączył: 20 Cze 2005
Posty: 1249

PostWysłany: Nie Kwi 19, 2015 11:57 pm      Temat postu: Odpowiedz z cytatem Pisownia

O, tu miła niespodzianka - korzystałeś z dev-c++ i kompilatora z nim dostarczonego, tak?

Zgadza się, że wersje gcc mogą mieć znaczenie. Ba, widziałem gdzieś, że mogą być także problemy z mieszaniem -std=c++11 z kodem bez tego przełącznika lub starszą wersją standardu w tej samej wersji kompilatora.


Jeśli chodzi o dystrybucję, to wystarczy, że wrzucisz program i potrzebne pliki dll do jednego katalogu. Nic więcej nie trzeba.

W tym co podlikowałem możesz przeczytać, że plików dll szuka najpierw tam, gdzie jest exe; potem w paru innych miejscach i na koniec w katalogach z PATH. Reszta z naszej perspektywy jako programistów jest nieporęczna, bo cwd może być rózne, a jak zaśmiecisz katalog systemowy, to przy denistalacji masz problem, bo nie wiesz czy to twój plik, czy może też zależność innego programu.


To jest kwestia linkowania - statycznie czy dynamisznie - a nie podsystemu (subsystem) - konsolowy czy gui. Przykładowo niedawno napisałem siostrze prostą nakładkę gui na dwa konsolowe programy by mogła kliknąć i magicznie otzymać wynik bez zabaw z tajemniczym czarnym prostokątem konsoli :) Program gui to mały plik wykorzystujący FLTK statycznie zlinkowane więc nie wymagał nic więcej*, jeden z konsolowych także ale dla drugiego musiałem dorzucić kilka plików dll.

* nie jest to zero zależności ale wszystkie potrzebne pliki dll należą do Windowsa i siedzą w jego katalogu systemowym więc z praktycznego punktu widzenia można je pominąć.

_________________
T.

"Some people, when confronted with a problem, think 'I know, I'll use regular expressions.' Now they have two problems." - Jamie Zawinski
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
lynxpl



Dołączył: 07 Kwi 2015
Posty: 15
Skąd: Warszawa

PostWysłany: Pon Kwi 20, 2015 9:19 pm  OP    Temat postu: Odpowiedz z cytatem Pisownia

Nie. DevCpp (5.10) zainstalowałem pustego a minGW (4.8.1) zainstalowałem oddzielnie, potem je sprzęgając.
Nie ustawiałem żadnej flagi odnośnie standardu, poleciał na defaultowych ustawieniach.

Wiem, że można wrzucić wszystko do jednego katalogu ale to nieergonomiczne (i nieeleganckie) rozwiązanie z punktu widzenia potencjalnego użytkownika końcowego. A w przypadku niektórych nawet niebezpieczne. ;)
Opcja z PATH mi się najbardziej podoba.

No rozumiem, że chodzi o linkowanie dynamiczne ale aby GUI takie jak GTKmm mogło działać trzeba właśnie "zainstalować" je na komputerze razem z wykorzystującym je programem. Bo bez niego sam program, na czystym Windowsie, nie będzie działał i w tym sensie użyłem słowa "nie przenośności"-dosłownie. (Wiem, że chodzi o system operacyjny, architekturę sprzętu itd.)
Powrót do góry
Zobacz profil autora Wyślij prywatną wiadomość
Wyświetl posty z ostatnich:   
Odpowiedz do tematu    Forum Coders' city Strona Główna -> Biblioteki Wszystkie czasy w strefie CET (Europa)

Strona 1 z 1

 
Skocz do:  
Możesz pisać nowe tematy
Możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Możesz dodawać załączniki na tym forum
Możesz pobierać pliki z tego forum




Debug: strone wygenerowano w 0.06217 sekund, zapytan = 11
contact

| Darmowe programy i porady Jelcyna | Tansze zakupy w Helionie | MS Office Blog |