linkowanie bibliteki ze zrodlami cpp pod linux

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
bloody82
Piegowaty Guziec
Piegowaty Guziec
Posty: 5
Rejestracja: 02 sie 2009, 10:16
Płeć: Mężczyzna
Wersja Ubuntu: 9.04
Środowisko graficzne: GNOME

linkowanie bibliteki ze zrodlami cpp pod linux

Post autor: bloody82 »

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!
Awatar użytkownika
kabanek
Zakręcona Traszka
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

Post autor: kabanek »

dawno się tak nie naczytałem :D
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
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:

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)
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...
Tomasz_K
Piegowaty Guziec
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

Post autor: Tomasz_K »

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.
bloody82
Piegowaty Guziec
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

Post autor: bloody82 »

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.
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 7 gości