Po pierwsze, nie wiem, czy istnieje rozwiązanie mojego problemu.Jak opcjonalnie zależeć od udostępnionego obiektu za pomocą gcc?
Mam następującą sytuację:
- I opracowali bibliotekę ramową, która zależy od kilku innych bibliotek do konkretnego dostępu sprzęt itp
- Do tej pory ta biblioteka została tylko ramy statycznie połączone przeciw.
- W przypadku plików wykonywalnych, które używają biblioteki framework, muszą być połączone tylko zależności kodu, który jest faktycznie używany przez plik wykonywalny. (Jeśli w ogóle nie mam dostępu do konkretnego sprzętu, nie muszę polegać na powiązanych bibliotekach).
Teraz muszę również utworzyć obiekt współdzielony biblioteki szkieletowej. Również zależności są dostępne jako biblioteki współdzielone, więc nie ma potrzeby żadnego statycznego łączenia.
Problem mam teraz:
- Przy budowie aplikacji, która łączy się dynamicznie do biblioteki ramowej muszę albo ogniwo wszystkie zależności dynamicznie do biblioteki ramowej lub aplikacji. (W przeciwnym razie mam referencje niezdefiniowane skarg od LD)
moje pytania:
jest jakiś sposób, aby ignorować pewne zależności obiekt udostępniony jeśli wiem, że moja aplikacja nie będzie użyć dowolnego kodu ram biblioteka, która zależy od tego udostępnionego obiektu?
Czy można to zrobić bez lub z minimalnymi zmianami kodu? (przełączniki łącznik/kompilatora)
muszę również statyczne linkowanie jak opisano w pierwotnej sytuacji, aby nadal pracować.
Informacje dodatkowe:
- System operacyjny: Linux (Debian Lenny)
- Kompilator: gcc-4,3
oznacza to jako odpowiedź najbliżej rozwiązania, które życzę. Mimo to wymaga to wszystkich bibliotek dostępnych na początkowym łączu aplikacji, ale nie muszą one być dystrybuowane z aplikacją. –
Aktualizacja: Używając -Wl, - warn-unresolved-symbols można sprawić, że obejście będzie wymagało wszystkich bibliotek w czasie połączenia aplikacji. W takim przypadku od dewelopera zależy, czy aplikacja będzie potrzebować nierozwiązanych symboli. –