Evo sta sam ja skontao.
Recimo da ja instaliram djeljenu biblioteku na moj racunar (biblioteka se npr. zove foo).
Ako je u pitanju npr. verzija 2.3.1.4, koraci su slececi:
1. Biblioteku kopiram u /usr/lib/libfoo.so.2.3.1.4
2. Izvrsim ldconfig
3. Napravim simbolicke linkove libfoo.so -> libfoo.so.2 -> libfoo.so.2.3 -> libfoo.so.2.3.1 -> libfoo.so.2.3.1.4
Kad kompajliram moj program, koristim
g++ -o myprog myprog.cpp -lfoo
E sad, sta se desava kad hocu da instaliram novu biblioteku, recimo 3.1.0.0?
Ja hocu da zadrzim staru i da mi programi kompajlirani sa starom bibliotekom, koriste tu staru, a novi programi novu biblioteku.
Pretpostavljam da sada imamo sledecu situaciju:
libfoo.so -> libfoo.so.3 -> libfoo.so.3.1 -> libfoo.so.3.1.0 -> libfoo.so.3.1.0.0
libfoo.so.2 -> libfoo.so.2.3 -> libfoo.so.2.3.1 -> libfoo.so.2.3.1.4
Pretpostavljam da ce linker prilikom pokretanja mog programa da koristi verziju 3.1.0.0 umjesto 2.3.1.4.
1. Kako to izbjeci?
Ja sam recimo pokusavao da ne pravim simbolicku vezu libfoo.so, nego da koristim libfoo.so.2, ali to ne funcionise, tj. ne mogu kompajlirati program. Pokusavao sam recimo
g++ -o myprog myprog.cpp -lfoo2
ali nije funcionisalo.
2. Kako kompajlirati program da koristi biblioteku samo odredjenog major release-a (libfoo.so.2)?
3. Sta se desava kada dodje nova verzija, tipa 2.4.0.0?