[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
 
[an error occurred while processing this directive] [an error occurred while processing this directive]
Skåne Sjælland Linux User Group - http://www.sslug.dk Home   Subscribe   Mail Archive   Forum   Calendar   Search
MhonArc Date: [Date Prev] [Date Index] [Date Next]   Thread: [Date Prev] [Thread Index] [Date Next]   MhonArc
 

Re: [PROGRAMMERING] libxxx.so i stedet for libxxx.so.N



In <sslug@sslug> Egon Andersen <sslug@sslug> writes:

>Under det mystiske subject gemmer sig et spørgsmål om hvordan jeg får 
>kompileret og linket mine programmer, så de ikke kræver libxxx.so.N, men 
>blot libxxx.so
>Jeg har observeret problemet ved overgangen fra FC3 til FC4, hvor mange 
>libraries tidligere hed noget med libxxx.so.4, hedder de nye libxxx.so.5 
>og så får jeg problemer med at de programmer jeg har kompileret under 
>FC3 ikke umiddelbart kan køre under FC4.
>Faktisk kan jeg blot lave en symlink der hedder libxxx.so.4 til 
>libxxx.so.5, så kører det igen.

Men det afhænger fuldstændig af hvilke funktioner i disse biblioteker
du bruger. At det virker er med andre ord 99% "held".

Når biblioteker skifter "major" versions-nummer er det som regel fordi
ABI'et - altså interfacet mellem applikationen og biblioteks-rutinerne
er blevet ændret på en inkompatibel måde. Og så skal applikationen
altså re-kompileres for at du kan være sikker på at det virker.

Det er sådan set hele fidusen ved at bruge versions-numre i biblioteker,
og så sørge for at applikationen ved hvilken version af ABI'et den 
er oversat med.


>Men burde jeg ikke kunne kompilere mine applikationer/programmer, så de 
>blot anvender libxxx.so, der er et symlink til hvad der nu måtte være på 
>maskinen/distroen?

Nej, for din applikation er kompileret med f.eks. nogle definitioner
af strukturer og variable, som kan være ændret. Hvis din applikation
f.eks. kalder funktionen stat(2) (som henter oplysninger om en fil),
så står der i din applikation

    struct stat stbuffer;

    stat(&stbuffer, "/tmp/minfil.txt");

Den mængde memory der afsættes til "stbuffer" variable bestemmes af
compileren når du oversætter programmet.

Og hvis en "struct stat" nu er 20 bytes i libc version X, men 30 bytes
i libc version Y, så vil biblioteks-funktionen altså overskrive 10
tilfældige bytes i din applikations memory når du kalder stat() med
det nye bibliotek via dit symlink.


Hvis du vil undgå besværet med at re-compilere, så må du linke dine
applikationer statisk. Det giver så bare en masse andre problemer...


Henrik



 
Home   Subscribe   Mail Archive   Index   Calendar   Search

 
 
Questions about the web-pages to <www_admin>. Last modified 2005-08-10, 22:44 CEST [an error occurred while processing this directive]
This page is maintained by [an error occurred while processing this directive]MHonArc [an error occurred while processing this directive] # [an error occurred while processing this directive] *