2009-08-21 13 views
5

Mam projekt C++ (g ++/raw Makefile) zaprojektowany dla Linuksa, kiedyś statycznie łączyłem wszystko, co działało dobrze przez wieki. Teraz chcę budować pliki binarne zarówno statycznie, jak i dynamicznie. Następująca komenda jest używana w moim Makefile do zbudowania biblioteki dynamicznej (np. Libtest):jak używać mojej własnej biblioteki dynamicznej w Linuksie (Makefile)

$ (CXX) -shared -Wl, -soname, libtest.so.1 -o libtest.so.1.0.0 $ (LIBTEST_OBJS)

wyjście jest libtest.so.1.0.0 który ma tak nazwać libtest.so.1

znalazłem przynajmniej dowiązania symbolicznego libtest.so -> libtest.so.1.0.0 jest wymagane, aby połączyć mój program klienta, który faktycznie korzysta z powyższej wygenerowanej biblioteki libtest.so.1.0.0.

Oto moje pytanie, czy chcę zbudować oprogramowanie, jaki jest standardowy sposób zarządzania powyższym dowiązaniem symbolicznym? Oczywiście nie chcę tych dodatkowych rzeczy w moim katalogu źródłowym, ale wymagane jest zbudowanie mojego pliku binarnego klienta, czy powinienem utworzyć go jako łącze tymczasowe do budowania klienta, a następnie usunąć go po zakończeniu? czy powinienem utworzyć katalog do hostowania biblioteki .so i jej linków i pozostawić wszystko, dopóki nie zrobię "make install", aby zainstalować je w innych określonych katalogach? Teraz będzie fajnie, jaki jest standardowy sposób robienia tego.

A może sposób generowania bibliotek jest nieprawidłowy? powinienem po prostu wygenerować libtest.so (jako rzeczywistą bibliotekę, a nie link), aby połączyć mój plik wykonywalny, a następnie zmienić nazwę biblioteki i utworzyć te linki podczas robienia `` make install ''?

każde wejście zostanie docenione. :)

Odpowiedz

1

Oczywiście nie generuj libtest.so jako rzeczywistego łącza. Zazwyczaj instalowanie plików z bibliotekami współużytkowanymi instaluje pliki .h i tworzy dowiązanie symboliczne libtest.so jako część skryptu instalacyjnego, który musisz napisać.

Jeśli nie instalujesz plików deweloperskich, a jedynie używasz biblioteki w procesie kompilacji pliku binarnego, po prostu utwórz łącze symbolik z pliku makefile.

Nie ma tu zbyt wiele standardu, niektórzy wolą budować artefakty w osobnym katalogu kompilacji, niektórzy nie przejmują się, czy jest zbudowany w katalogu źródłowym. Zbudowałbym jednak osobny katalog i utrzymywałbym katalog źródłowy w czystym pliku .o/.so /.

Może się okazać użyteczne informacje here

1

Moja sugestia jest użycie libtool który obsługuje tego typu sytuacjach.

+0

+1 Używanie libtool ułatwi, kiedy ostatecznie zdecydujesz się przenieść go z Linuksa na coś innego - libtool obsługuje wszystkie zależne od platformy problemy bibliotek współdzielonych. –

Powiązane problemy