W gcc (g ++) skompilowałem bibliotekę statyczną .a
(nazywam ją some_static_lib.a
). Chcę połączyć (jest to właściwe zdanie?) Ten plik .a
do innej biblioteki dynamicznej (nazywam ją libsomeDyn.so
), którą buduję. Choć .so
kompiluje, nie widzę zawartości .a
pod .so
użyciu nm
polecenie:jak powiązać bibliotekę statyczną z biblioteką dynamiczną w gcc
/usr/bin/g ++ -fPIC -g -O2 -Wall -Werror -pipe -march = Pentium3 -mtune = prescott -MD -D_FILE_OFFSET_BITS = 64 -DLINUX -D_GNU_SOURCE -D_THREAD_SAFE -I ../../../../../../../../ -I ../../ .. /../../../../..//libraries -Wl, -rpath,/usr/lib -o libsomeDyn.so some.o another.o some_static_lib.a -shared -Wl -x - Wl -soname, libsomeDyn.so
Nie widzę funkcji pod some_static_lib.a
pod libsomeDyn.so
. Co ja robię źle?
Mam więc dziwną zależność w bibliotece statycznej. Odwołuje się do funkcji zawartej w bibliotece dynamicznej. Jak powiedzieć gcc, aby znaleźć niezdefiniowane odwołanie w bibliotece dynamicznej? Dzięki – bob
@bob - nie powinno być żadnego problemu z biblioteki statycznych odwołującego symbol wewnątrz biblioteki dynamicznej (po połączeniu statycznego biblioteki, to tak samo jakbyś bezpośrednio odwoływać się .o w linii poleceń). Podejrzewam, że musi być jakiś inny problem i zalecam opublikowanie nowego pytania. –
To było rozwiązanie dla mnie, ale na OSX musiałem użyć '-all_load' jako odpowiednika' --whole-archive', jak ktoś zaproponował mi na IRC. Mam nadzieję, że to pomoże komuś innemu! – vmonteco