Witam. Zainstalowałem sobie pewien pakiet oprogramowania pod linux (oparty na żródłach c++) /dalej zwany właśnie 'pakiet'/ wg pliku readme, tj.:
:~ ./configure
:~ make
:~ sudo make install
i poszło pomyślnie. Jest konfigurowany jw. przez plik 'configure' i kompilowany przez makefile.in lub .am, o wszystkim co teraz wymieniam nie mam zielonego pojęcia, są to jakieś potworne magiczne pliki shell-scriptowe. Jednak nie muszę mieć pojęcia o nich, powiedzmy.
Używa się go wpisując komendy z opcjami w konsoli (z ew. argumentami). Pakiet zawiera w podkatalogach kilkanaście plików cpp oraz h. Te pliki cpp to jakby moduły - osobne "podprogramy", z których kazdy coś tam robi. Moim zadaniem jest napisać nowy taki cpp w ramach tego pakietu, który będzie robił coś tam innego. Wstępnie w ramach testów zmienialem sobie kod jednego z nich (z tych istniejących juz filtrów cpp), zwyczajnie w Gedit, aby sprawdzić czy w ogóle coś się zmieni w działaniu (to co tam "napsuje") i po zapisaniu zmian i wklepaniu ponownie "sudo make install", program działał ku mojej radości już na zmienionych źródłach (np. wypisałem fprintf'em przez stderr jakis belkot na ekran).
No i teraz się zaczyna - na tym etapie muszę skonsolidować ten pakiet z pewną biblioteką /dalej zwaną biblioteką właśnie/. Muszę korzystać z roznych jej funkcji w tymże moim pliku zrodlowym cpp szanownego pakietu. Nie mam pojęcia jak to zrobić. Biblioteka to też niezly moloch i nawet ma podobny "linuxowy" zestaw plikow konfiguracyjnych (configure, makefile, itp.) no i podkatalogi z licznymi zrodlami .c i także mozna ją zainstalować niezależnie w system porzez ./configure -> make -> make install. Tak już zrobiłem ale nic to nie dało. Wiadomo, że w nagłówku mojego cpp musi być wpisane #include "biblioteka.h". Tyle to i ja wiem.
Ale co muszę jeszcze zrobić aby po prostu - przy przekompilowywaniu pakietu, funckje tejze biblioteki uzyte w jego plikach zrodlowych, były linkowane razem z pakietem. Do tej pory zainstalowalem ją w systemie jak wspomnialem i dopisalem takze #include do zrodla, ale przy "make install" wywala monity o błędach, ze niestety undefiend reference to "nazwa funkcji". Proszę o pomoc! nie znam się na tych zagadnieniach związanych z kompilacją z konsoli (jedynie sam rozkminilem ze ponowny 'make install' sukcesywnie przeinstalowywuje mi zrodla pakietu), bron boze z makefajlami i bash-scriptem itd. Mam po prostu nadzieje, ze jakos łatwo da sie to zlinkowac - aby pakiet podczas własnej kompilacji widział poprostu funckje owej biblioteki. Licze się z tym, że moze trzeba jednak dopisac cos do "nieprzyjaznych" pliczkow scritpowych ktore mają tysiace linii, ale co i gdzie to trudno sobie wyobrazic w ogole, a moze wcale nei trzeba tylko ja sie nie znam, a mozna to jakos odgornie przez system skonsolidowac - wkoncu sama biblitoeka sie zainstalowala.
Nie ukrywam, że wszelką pomoc, jaka okaże się praktyczna, jestem skłonny potraktować biznesowo, ponieważ to dla mnie nie problem, a sprawa jest ważna.
Z góry dzieki!
linkowanie bibliteki ze zrodlami cpp pod linux
- kabanek
- Zakręcona Traszka
- Posty: 592
- Rejestracja: 23 cze 2009, 20:34
- Płeć: Mężczyzna
- Wersja Ubuntu: 13.10
- Środowisko graficzne: Xfce
- Architektura: x86_64
- Kontakt:
Odp: linkowanie bibliteki ze zrodlami cpp pod linux
dawno się tak nie naczytałem 
pojawia się błąd undefinied reference, ponieważ właśnie, Twój plik .cpp nie jest wkompilowany i obawiam sie, że bez edycji makefile się nie obejdzie...
dopisz do makefile przy podobnych liniach jak ta
dzięki temu będziesz mógł kompilować swój kod wraz ze wszystkimi, ale to niestety nie wszystko, ponieważ on nie zostanie jeszcze zlinkowany...
i nie wiem, jaki to jest ten projekt o którym teraz mówisz i teraz trochę będę iść na ślepo... poszukaj może linijki(powinna być gdzieś początku, ale nie na samym, po linijce w której jest napisane "all"), coś w stylu:
i na końcu tej listy, gdzie są wymienione te pliki dodaj swój.
wszystko jest jak próbowanie przykleić ogon osłowi z zawiązanymi oczami...

pojawia się błąd undefinied reference, ponieważ właśnie, Twój plik .cpp nie jest wkompilowany i obawiam sie, że bez edycji makefile się nie obejdzie...
dopisz do makefile przy podobnych liniach jak ta
Kod: Zaznacz cały
mojPlik.o: mojPllik.cpp
g++ -c -o mojPlik.o mojPlik.cpp
i nie wiem, jaki to jest ten projekt o którym teraz mówisz i teraz trochę będę iść na ślepo... poszukaj może linijki(powinna być gdzieś początku, ale nie na samym, po linijce w której jest napisane "all"), coś w stylu:
Kod: Zaznacz cały
nazwa_tego_programu:jakieś_pliki
$(GPP) plik.o plik2.o plik3.o (i może tu być jeszcze inne dziwne rzeczy)
wszystko jest jak próbowanie przykleić ogon osłowi z zawiązanymi oczami...
-
- Piegowaty Guziec
- Posty: 8
- Rejestracja: 11 sie 2009, 09:43
- Płeć: Mężczyzna
- Wersja Ubuntu: 9.04
- Środowisko graficzne: GNOME
Odp: linkowanie bibliteki ze zrodlami cpp pod linux
Dawno już nie kompilowałem ze źródeł.
Ja myślę że skoro są tam pliki makefile.in to by znaczyło że zostały stworzone przez autoconf - i tutaj należało by szukać wskazówek.
Ja myślę że skoro są tam pliki makefile.in to by znaczyło że zostały stworzone przez autoconf - i tutaj należało by szukać wskazówek.
-
- Piegowaty Guziec
- Posty: 5
- Rejestracja: 02 sie 2009, 10:16
- Płeć: Mężczyzna
- Wersja Ubuntu: 9.04
- Środowisko graficzne: GNOME
Odp: linkowanie bibliteki ze zrodlami cpp pod linux
Sprawa rozwiązana. Otóż:
pakiety oparte na configure, mają zazwyczaj takie same zmienne owego pliku konfiguracyjnego. Przykładowo CXX= to zmienna pod jaką podaje się standardowy kompilator C++ (jezeli ma byc inny niz domyślny), natomiast CXXFLAGS= przyjmuje flagi kompilatora i o tę zmienną tutaj chodzi.
Jak wiemy flagą, która dodaje bibliotekę jest -l, a więc należało wklepać:
./configure CXXFLAGS=-l nazwaBiblioteki
i poszło jak po maślę. Do zamknięcia.
pakiety oparte na configure, mają zazwyczaj takie same zmienne owego pliku konfiguracyjnego. Przykładowo CXX= to zmienna pod jaką podaje się standardowy kompilator C++ (jezeli ma byc inny niz domyślny), natomiast CXXFLAGS= przyjmuje flagi kompilatora i o tę zmienną tutaj chodzi.
Jak wiemy flagą, która dodaje bibliotekę jest -l, a więc należało wklepać:
./configure CXXFLAGS=-l nazwaBiblioteki
i poszło jak po maślę. Do zamknięcia.
Kto jest online
Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 4 gości