libtool
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: totally confused by versioning system of libtool...


From: Peter O'Gorman
Subject: Re: totally confused by versioning system of libtool...
Date: Sun, 15 May 2005 21:06:01 +0900
User-agent: Mozilla Thunderbird 1.0 (Macintosh/20041206)

Bill Northcott wrote:
Possibly, the last line could equally be:
install_name libfoo.2.dylib compatibility_version 3.0.0 current_version 3.2.15
That would have the same effect on Darwin, if applied consistently.


The encoded current_version is for informational purposes only, nothing uses it, compatibility_version is used by dyld (darwin's dynamic linker) when loading libraries. It checks that the library version it loaded has a compatibility_version greater than or equal to the one it saw when it was created by the static linker.

An example is attached.

Peter
--
Peter O'Gorman - http://www.pogma.com
peter% emacs lib.c
peter% cc -dynamiclib -o libbill.dylib lib.c -compatibility_version 1.0 
-current_version 0.9
peter% otool -L libbill.dylib 
libbill.dylib:
        libbill.dylib (compatibility version 1.0.0, current version 0.9.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 71.1.3)
peter% cat lib.c 
int libval() { return 1; }
peter% echo 'int main() { return libval(); }' > main.c
peter% cc -o main main.c ./libbill.dylib 
peter% ./main 
peter% echo $?
1
peter% perl -pi -e 's/1/2/' lib.c 
peter% cat lib.c 
int libval() { return 2; }
peter% cc -dynamiclib -o libbill.dylib lib.c -compatibility_version 900.0 
-current_version 999.9
peter% otool -L libbill.dyliblibbill.dylib:
        libbill.dylib (compatibility version 900.0.0, current version 999.9.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current 
version 71.1.3)
peter% ./mainpeter% echo $?2
peter% perl -pi -e 's/1/3/' lib.c                        peter% cc -o main 
main.c ./libbill.dylibpeter% ./main
peter% echo $?
2
peter% cc -dynamiclib -o libbill.dylib lib.c -compatibility_version 899.0 
-current_version 1000
peter% ./maindyld: ./main version mismatch for library: libbill.dylib 
(compatibility version of user: 900.0.0 greater than library's version: 899.0.0)
Trace/BPT trap

reply via email to

[Prev in Thread] Current Thread [Next in Thread]